<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Chapter 1 General Information</title>
<link rel="stylesheet" href="mvl.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets + chunker.py v1.9.2" />
<link rel="start" href="index.html" title="{book-title}" />
<link rel="up" href="" title="" />
<link rel="prev" href="preface.html" title=" Preface and Legal Notices" />
<link rel="next" href="installing.html" title="Chapter 2 Installing and Upgrading MySQL" />
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Chapter 1 General Information</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
<th width="60%" align="center"></th>
<td width="20%" align="right"> <a accesskey="n" href="installing.html">Next</a></td>
</tr>
</table>
<hr>
</div>
<div class="chapter">
<div class="titlepage">
<div>
<div>
<h1 class="title"><a name="introduction"></a>Chapter 1 General Information</h1>

</div>

</div>

</div>
<div class="toc">
<p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="introduction.html#manual-info">1.1 About This Manual</a></span></dt><dt><span class="section"><a href="introduction.html#manual-conventions">1.2 Typographical and Syntax Conventions</a></span></dt><dt><span class="section"><a href="introduction.html#what-is">1.3 Overview of the MySQL Database Management System</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#what-is-mysql">1.3.1 What is MySQL?</a></span></dt><dt><span class="section"><a href="introduction.html#features">1.3.2 The Main Features of MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#history">1.3.3 History of MySQL</a></span></dt></dl></dd><dt><span class="section"><a href="introduction.html#mysql-nutshell">1.4 What Is New in MySQL 5.7</a></span></dt><dt><span class="section"><a href="introduction.html#added-deprecated-removed">1.5 Server and Status Variables and Options Added, Deprecated, or Removed in
MySQL 5.7</a></span></dt><dt><span class="section"><a href="introduction.html#information-sources">1.6 MySQL Information Sources</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#mysql-web-sites">1.6.1 MySQL Websites</a></span></dt><dt><span class="section"><a href="introduction.html#forums">1.6.2 MySQL Community Support at the MySQL Forums</a></span></dt><dt><span class="section"><a href="introduction.html#mysql-enterprise-information">1.6.3 MySQL Enterprise</a></span></dt></dl></dd><dt><span class="section"><a href="introduction.html#bug-reports">1.7 How to Report Bugs or Problems</a></span></dt><dt><span class="section"><a href="introduction.html#compatibility">1.8 MySQL Standards Compliance</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#extensions-to-ansi">1.8.1 MySQL Extensions to Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#differences-from-ansi">1.8.2 MySQL Differences from Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#constraints">1.8.3 How MySQL Deals with Constraints</a></span></dt></dl></dd><dt><span class="section"><a href="introduction.html#credits">1.9 Credits</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#contributors">1.9.1 Contributors to MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#documenters-translators">1.9.2 Documenters and translators</a></span></dt><dt><span class="section"><a href="introduction.html#packages">1.9.3 Packages that support MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#tools-used-to-create-mysql">1.9.4 Tools that were used to create MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#supporters">1.9.5 Supporters of MySQL</a></span></dt></dl></dd></dl>
</div>
<a class="indexterm" name="idm46734436868416"></a><a class="indexterm" name="idm46734436867248"></a><p>
    The MySQL™ software delivers a very fast, multithreaded,
    multi-user, and robust SQL (Structured Query Language) database
    server. MySQL Server is intended for mission-critical, heavy-load
    production systems as well as for embedding into mass-deployed
    software. Oracle is a registered trademark of Oracle Corporation
    and/or its affiliates. MySQL is a trademark of Oracle Corporation
    and/or its affiliates, and shall not be used by Customer without
    Oracle's express written authorization. Other names may be
    trademarks of their respective owners.
  </p><p>
    The MySQL software is Dual Licensed. Users can choose to use the
    MySQL software as an Open Source product under the terms of the GNU
    General Public License (<a class="ulink" href="http://www.fsf.org/licenses/" target="_top">http://www.fsf.org/licenses/</a>)
    or can purchase a standard commercial license from Oracle. See
    <a class="ulink" href="http://www.mysql.com/company/legal/licensing/" target="_top">http://www.mysql.com/company/legal/licensing/</a> for
    more information on our licensing policies.
  </p><p>
    The following list describes some sections of particular interest in
    this manual:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        For a discussion of MySQL Database Server capabilities, see
        <a class="xref" href="introduction.html#features" title="1.3.2 The Main Features of MySQL">Section 1.3.2, “The Main Features of MySQL”</a>.
      </p></li><li class="listitem"><p>
        For an overview of new MySQL features, see
        <a class="xref" href="introduction.html#mysql-nutshell" title="1.4 What Is New in MySQL 5.7">Section 1.4, “What Is New in MySQL 5.7”</a>. For information about the
        changes in each version, see the
        <a class="ulink" href="https://dev.mysql.com/doc/relnotes/mysql/5.7/en/" target="_top">Release
        Notes</a>.
      </p></li><li class="listitem"><p>
        For installation instructions, see <a class="xref" href="installing.html" title="Chapter 2 Installing and Upgrading MySQL">Chapter 2, <i>Installing and Upgrading MySQL</i></a>.
        For information about upgrading MySQL, see
        <a class="xref" href="installing.html#upgrading" title="2.11 Upgrading MySQL">Section 2.11, “Upgrading MySQL”</a>.
      </p></li><li class="listitem"><p>
        For a tutorial introduction to the MySQL Database Server, see
        <a class="xref" href="tutorial.html" title="Chapter 3 Tutorial">Chapter 3, <i>Tutorial</i></a>.
      </p></li><li class="listitem"><p>
        For information about configuring and administering MySQL
        Server, see <a class="xref" href="server-administration.html" title="Chapter 5 MySQL Server Administration">Chapter 5, <i>MySQL Server Administration</i></a>.
      </p></li><li class="listitem"><p>
        For information about security in MySQL, see
        <a class="xref" href="security.html" title="Chapter 6 Security">Chapter 6, <i>Security</i></a>.
      </p></li><li class="listitem"><p>
        For information about setting up replication servers, see
        <a class="xref" href="replication.html" title="Chapter 16 Replication">Chapter 16, <i>Replication</i></a>.
      </p></li><li class="listitem"><p>
        For information about MySQL Enterprise, the commercial MySQL
        release with advanced features and management tools, see
        <a class="xref" href="mysql-enterprise.html" title="Chapter 29 MySQL Enterprise Edition">Chapter 29, <i>MySQL Enterprise Edition</i></a>.
      </p></li><li class="listitem"><p>
        For answers to a number of questions that are often asked
        concerning the MySQL Database Server and its capabilities, see
        <a class="xref" href="faqs.html" title="Appendix A MySQL 5.7 Frequently Asked Questions">Appendix A, <i>MySQL 5.7 Frequently Asked Questions</i></a>.
      </p></li><li class="listitem"><p>
        For a history of new features and bug fixes, see the
        <a class="ulink" href="https://dev.mysql.com/doc/relnotes/mysql/5.7/en/" target="_top">Release
        Notes</a>.
</p></li></ul>
</div>
<a class="indexterm" name="idm46734436844848"></a><a class="indexterm" name="idm46734431227744"></a><a class="indexterm" name="idm46734431226352"></a><a class="indexterm" name="idm46734431224960"></a>
<div class="important" style="margin-left: 0.5in; margin-right: 0.5in;">

<div class="admon-title">
Important
</div>
<p>
      To report problems or bugs, please use the instructions at
      <a class="xref" href="introduction.html#bug-reports" title="1.7 How to Report Bugs or Problems">Section 1.7, “How to Report Bugs or Problems”</a>. If you find a security bug in MySQL
      Server, please let us know immediately by sending an email message
      to <code class="email">&lt;<a class="email" href="mailto:secalert_us@oracle.com">secalert_us@oracle.com</a>&gt;</code>. Exception: Support
      customers should report all problems, including security bugs, to
      Oracle Support.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="manual-info"></a>1.1 About This Manual</h2>

</div>

</div>

</div>
<a class="indexterm" name="idm46734431220672"></a><a class="indexterm" name="idm46734431219664"></a><p>
      This is the Reference Manual for the MySQL Database System,
      version 5.7, through release 5.7.31.
      Differences between minor versions of MySQL 5.7 are
      noted in the present text with reference to release numbers
      (5.7.<em class="replaceable"><code>x</code></em>).
    </p><p>
      This manual is not intended for use with older versions of the
      MySQL software due to the many functional and other differences
      between MySQL 5.7 and previous versions. If you are
      using an earlier release of the MySQL software, please refer to
      the appropriate manual. For example,
      <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/" target="_top"><em class="citetitle">MySQL 5.6 Reference Manual</em></a>
      covers the 5.6 series of MySQL software releases.
    </p><p>
      If you are using MySQL 8.0, please refer to the
      <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/" target="_top"><em class="citetitle">MySQL 8.0 Reference Manual</em></a>.
    </p><p>
      Because this manual serves as a reference, it does not provide
      general instruction on SQL or relational database concepts. It
      also does not teach you how to use your operating system or
      command-line interpreter.
    </p><p>
      The MySQL Database Software is under constant development, and the
      Reference Manual is updated frequently as well. The most recent
      version of the manual is available online in searchable form at
      <a class="ulink" href="https://dev.mysql.com/doc/" target="_top">https://dev.mysql.com/doc/</a>. Other formats also are available
      there, including HTML, PDF, and EPUB versions.
    </p><a class="indexterm" name="idm46734431212240"></a><a class="indexterm" name="idm46734431210848"></a><p>
      The Reference Manual source files are written in DocBook XML
      format. The HTML version and other formats are produced
      automatically, primarily using the DocBook XSL stylesheets. For
      information about DocBook, see <a class="ulink" href="http://docbook.org/" target="_top">http://docbook.org/</a>
    </p><p>
      The source code for MySQL itself contains internal documentation
      written using Doxygen. The generated Doxygen content is available
      <a class="ulink" href="https://dev.mysql.com/doc/index-other.html" target="_top">https://dev.mysql.com/doc/index-other.html</a>. It is also possible to
      generate this content locally from a MySQL source distribution
      using the instructions at
      <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/source-installation-doxygen.html" target="_top">Generating MySQL Doxygen Documentation Content</a>.
    </p><p>
      If you have questions about using MySQL, join the
      <a class="ulink" href="https://mysqlcommunity.slack.com/" target="_top">MySQL Community
      Slack</a>, or ask in our forums; see <a class="xref" href="introduction.html#forums" title="1.6.2 MySQL Community Support at the MySQL Forums">Section 1.6.2, “MySQL Community Support at the MySQL Forums”</a>.
      If you have suggestions concerning additions or corrections to the
      manual itself, please send them to the
      <a class="ulink" href="http://www.mysql.com/company/contact/" target="_top">http://www.mysql.com/company/contact/</a>.
    </p><p>
      This manual was originally written by David Axmark and Michael
      <span class="quote">“<span class="quote">Monty</span>”</span> Widenius. It is maintained by the MySQL
      Documentation Team, consisting of Chris Cole, Paul DuBois,
      Margaret Fisher, Edward Gilmore, Stefan Hinz, David Moss, Philip
      Olson, Daniel Price, Daniel So, and Jon Stephens.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="manual-conventions"></a>1.2 Typographical and Syntax Conventions</h2>

</div>

</div>

</div>
<p>
    This manual uses certain typographical conventions:
</p><a class="indexterm" name="idm46734431201360"></a><a class="indexterm" name="idm46734431199968"></a><a class="indexterm" name="idm46734431198960"></a><a class="indexterm" name="idm46734431197568"></a><a class="indexterm" name="idm46734431196176"></a><a class="indexterm" name="idm46734431195168"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        <code class="literal">Text in this style</code> is used for SQL
        statements; database, table, and column names; program listings
        and source code; and environment variables. Example: <span class="quote">“<span class="quote">To
        reload the grant tables, use the <a class="link" href="sql-statements.html#flush-privileges"><code class="literal">FLUSH
        PRIVILEGES</code></a> statement.</span>”</span>
      </p></li><li class="listitem"><p>
        <strong class="userinput"><code>Text in this style</code></strong> indicates input that
        you type in examples.
      </p></li><li class="listitem"><p>
        <span class="command"><strong>Text in this style</strong></span> indicates the names of
        executable programs and scripts, examples being
        <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> (the MySQL command-line client program)
        and <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> (the MySQL server executable).
      </p></li><li class="listitem"><p>
        <em class="replaceable"><code>Text in this style</code></em> is used for
        variable input for which you should substitute a value of your
        own choosing.
      </p></li><li class="listitem"><p>
        <span class="emphasis"><em>Text in this style</em></span> is used for emphasis.
      </p></li><li class="listitem"><p>
        <span class="bold"><strong>Text in this style</strong></span> is used in
        table headings and to convey especially strong emphasis.
      </p></li><li class="listitem"><p>
        <code class="option">Text in this style</code> is used to indicate a
        program option that affects how the program is executed, or that
        supplies information that is needed for the program to function
        in a certain way. <span class="emphasis"><em>Example</em></span>: <span class="quote">“<span class="quote">The
        <code class="option">--host</code> option (short form <code class="option">-h</code>)
        tells the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> client program the hostname
        or IP address of the MySQL server that it should connect
        to</span>”</span>.
      </p></li><li class="listitem"><p>
        File names and directory names are written like this: <span class="quote">“<span class="quote">The
        global <code class="filename">my.cnf</code> file is located in the
        <code class="filename">/etc</code> directory.</span>”</span>
      </p></li><li class="listitem"><p>
        Character sequences are written like this: <span class="quote">“<span class="quote">To specify a
        wildcard, use the <span class="quote">‘<span class="quote"><code class="literal">%</code></span>’</span>
        character.</span>”</span>
</p></li></ul>
</div>
<p>
    When commands are shown that are meant to be executed from within a
    particular program, the prompt shown preceding the command indicates
    which command to use. For example, <code class="literal">shell&gt;</code>
    indicates a command that you execute from your login shell,
    <code class="literal">root-shell&gt;</code> is similar but should be executed
    as <code class="literal">root</code>, and <code class="literal">mysql&gt;</code>
    indicates a statement that you execute from the
    <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> client program:
  </p><pre data-lang="terminal" class="programlisting">shell&gt; <strong class="userinput"><code>type a shell command here</code></strong>
root-shell&gt; <strong class="userinput"><code>type a shell command as <em class="replaceable"><code>root</code></em> here</code></strong>
mysql&gt; <strong class="userinput"><code>type a mysql statement here</code></strong>
</pre><p>
    In some areas different systems may be distinguished from each other
    to show that commands should be executed in two different
    environments. For example, while working with replication the
    commands might be prefixed with <code class="literal">master</code> and
    <code class="literal">slave</code>:
  </p><pre data-lang="sql" class="programlisting">master&gt; <strong class="userinput"><code>type a mysql command on the replication master here</code></strong>
slave&gt; <strong class="userinput"><code>type a mysql command on the replication slave here</code></strong>
</pre><p>
    The <span class="quote">“<span class="quote">shell</span>”</span> is your command interpreter. On Unix, this
    is typically a program such as <span class="command"><strong>sh</strong></span>,
    <span class="command"><strong>csh</strong></span>, or <span class="command"><strong>bash</strong></span>. On Windows, the
    equivalent program is <span class="command"><strong>command.com</strong></span> or
    <span class="command"><strong>cmd.exe</strong></span>, typically run in a console window.
  </p><p>
    When you enter a command or statement shown in an example, do not
    type the prompt shown in the example.
  </p><p>
    Database, table, and column names must often be substituted into
    statements. To indicate that such substitution is necessary, this
    manual uses <em class="replaceable"><code>db_name</code></em>,
    <em class="replaceable"><code>tbl_name</code></em>, and
    <em class="replaceable"><code>col_name</code></em>. For example, you might see a
    statement like this:
  </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SELECT <em class="replaceable"><code>col_name</code></em> FROM <em class="replaceable"><code>db_name</code></em>.<em class="replaceable"><code>tbl_name</code></em>;</code></strong>
</pre><p>
    This means that if you were to enter a similar statement, you would
    supply your own database, table, and column names, perhaps like
    this:
  </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SELECT author_name FROM biblio_db.author_list;</code></strong>
</pre><p>
    SQL keywords are not case-sensitive and may be written in any
    lettercase. This manual uses uppercase.
  </p><p>
    In syntax descriptions, square brackets
    (<span class="quote">“<span class="quote"><code class="literal">[</code></span>”</span> and
    <span class="quote">“<span class="quote"><code class="literal">]</code></span>”</span>) indicate optional words or
    clauses. For example, in the following statement, <code class="literal">IF
    EXISTS</code> is optional:
  </p><pre data-lang="sql" class="programlisting">DROP TABLE [IF EXISTS] <em class="replaceable"><code>tbl_name</code></em>
</pre><p>
    When a syntax element consists of a number of alternatives, the
    alternatives are separated by vertical bars
    (<span class="quote">“<span class="quote"><code class="literal">|</code></span>”</span>). When one member from a set of
    choices <span class="emphasis"><em>may</em></span> be chosen, the alternatives are
    listed within square brackets (<span class="quote">“<span class="quote"><code class="literal">[</code></span>”</span>
    and <span class="quote">“<span class="quote"><code class="literal">]</code></span>”</span>):
  </p><pre data-lang="sql" class="programlisting">TRIM([[BOTH | LEADING | TRAILING] [<em class="replaceable"><code>remstr</code></em>] FROM] <em class="replaceable"><code>str</code></em>)
</pre><p>
    When one member from a set of choices <span class="emphasis"><em>must</em></span> be
    chosen, the alternatives are listed within braces
    (<span class="quote">“<span class="quote"><code class="literal">{</code></span>”</span> and
    <span class="quote">“<span class="quote"><code class="literal">}</code></span>”</span>):
  </p><pre data-lang="sql" class="programlisting">{DESCRIBE | DESC} <em class="replaceable"><code>tbl_name</code></em> [<em class="replaceable"><code>col_name</code></em> | <em class="replaceable"><code>wild</code></em>]
</pre><p>
    An ellipsis (<code class="literal">...</code>) indicates the omission of a
    section of a statement, typically to provide a shorter version of
    more complex syntax. For example,
    <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT ... INTO
    OUTFILE</code></a> is shorthand for the form of
    <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> statement that has an
    <code class="literal">INTO OUTFILE</code> clause following other parts of the
    statement.
  </p><p>
    An ellipsis can also indicate that the preceding syntax element of a
    statement may be repeated. In the following example, multiple
    <em class="replaceable"><code>reset_option</code></em> values may be given, with
    each of those after the first preceded by commas:
  </p><pre data-lang="sql" class="programlisting">RESET <em class="replaceable"><code>reset_option</code></em> [,<em class="replaceable"><code>reset_option</code></em>] ...
</pre><p>
    Commands for setting shell variables are shown using Bourne shell
    syntax. For example, the sequence to set the <code class="literal">CC</code>
    environment variable and run the <span class="command"><strong>configure</strong></span>
    command looks like this in Bourne shell syntax:
  </p><pre data-lang="terminal" class="programlisting">shell&gt; <strong class="userinput"><code>CC=gcc ./configure</code></strong>
</pre><a class="indexterm" name="idm46734431127712"></a><a class="indexterm" name="idm46734431126704"></a><p>
    If you are using <span class="command"><strong>csh</strong></span> or <span class="command"><strong>tcsh</strong></span>,
    you must issue commands somewhat differently:
  </p><pre data-lang="terminal" class="programlisting">shell&gt; <strong class="userinput"><code>setenv CC gcc</code></strong>
shell&gt; <strong class="userinput"><code>./configure</code></strong>
</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="what-is"></a>1.3 Overview of the MySQL Database Management System</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#what-is-mysql">1.3.1 What is MySQL?</a></span></dt><dt><span class="section"><a href="introduction.html#features">1.3.2 The Main Features of MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#history">1.3.3 History of MySQL</a></span></dt></dl>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="what-is-mysql"></a>1.3.1 What is MySQL?</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734431119824"></a><a class="indexterm" name="idm46734431118432"></a><p>
      MySQL, the most popular Open Source SQL database management
      system, is developed, distributed, and supported by Oracle
      Corporation.
    </p><p>
      The MySQL website (<a class="ulink" href="http://www.mysql.com/" target="_top">http://www.mysql.com/</a>) provides
      the latest information about MySQL software.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <span class="bold"><strong>MySQL is a database management
          system.</strong></span>
        </p><p>
          A database is a structured collection of data. It may be
          anything from a simple shopping list to a picture gallery or
          the vast amounts of information in a corporate network. To
          add, access, and process data stored in a computer database,
          you need a database management system such as MySQL Server.
          Since computers are very good at handling large amounts of
          data, database management systems play a central role in
          computing, as standalone utilities, or as parts of other
          applications.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>MySQL databases are
          relational.</strong></span>
        </p><p>
          <a class="indexterm" name="idm46734431111360"></a>

          A relational database stores data in separate tables rather
          than putting all the data in one big storeroom. The database
          structures are organized into physical files optimized for
          speed. The logical model, with objects such as databases,
          tables, views, rows, and columns, offers a flexible
          programming environment. You set up rules governing the
          relationships between different data fields, such as
          one-to-one, one-to-many, unique, required or optional, and
          <span class="quote">“<span class="quote">pointers</span>”</span> between different tables. The database
          enforces these rules, so that with a well-designed database,
          your application never sees inconsistent, duplicate, orphan,
          out-of-date, or missing data.
        </p><p>
          The SQL part of <span class="quote">“<span class="quote">MySQL</span>”</span> stands for
          <span class="quote">“<span class="quote">Structured Query Language</span>”</span>. SQL is the most
          common standardized language used to access databases.
          Depending on your programming environment, you might enter SQL
          directly (for example, to generate reports), embed SQL
          statements into code written in another language, or use a
          language-specific API that hides the SQL syntax.
        </p><p>
          SQL is defined by the ANSI/ISO SQL Standard. The SQL standard
          has been evolving since 1986 and several versions exist. In
          this manual, <span class="quote">“<span class="quote">SQL-92</span>”</span> refers to the standard
          released in 1992, <span class="quote">“<span class="quote">SQL:1999</span>”</span> refers to the
          standard released in 1999, and <span class="quote">“<span class="quote">SQL:2003</span>”</span> refers
          to the current version of the standard. We use the phrase
          <span class="quote">“<span class="quote">the SQL standard</span>”</span> to mean the current version of
          the SQL Standard at any time.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>MySQL software is Open
          Source.</strong></span>
        </p><p>
          <a class="indexterm" name="idm46734431103488"></a>

          <a class="indexterm" name="idm46734431102096"></a>

          <a class="indexterm" name="idm46734431100704"></a>

          <a class="indexterm" name="idm46734431099312"></a>

          Open Source means that it is possible for anyone to use and
          modify the software. Anybody can download the MySQL software
          from the Internet and use it without paying anything. If you
          wish, you may study the source code and change it to suit your
          needs. The MySQL software uses the GPL (GNU General Public
          License), <a class="ulink" href="http://www.fsf.org/licenses/" target="_top">http://www.fsf.org/licenses/</a>, to
          define what you may and may not do with the software in
          different situations. If you feel uncomfortable with the GPL
          or need to embed MySQL code into a commercial application, you
          can buy a commercially licensed version from us. See the MySQL
          Licensing Overview for more information
          (<a class="ulink" href="http://www.mysql.com/company/legal/licensing/" target="_top">http://www.mysql.com/company/legal/licensing/</a>).
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>The MySQL Database Server is very fast,
          reliable, scalable, and easy to use.</strong></span>
        </p><p>
          If that is what you are looking for, you should give it a try.
          MySQL Server can run comfortably on a desktop or laptop,
          alongside your other applications, web servers, and so on,
          requiring little or no attention. If you dedicate an entire
          machine to MySQL, you can adjust the settings to take
          advantage of all the memory, CPU power, and I/O capacity
          available. MySQL can also scale up to clusters of machines,
          networked together.
        </p><p>
          MySQL Server was originally developed to handle large
          databases much faster than existing solutions and has been
          successfully used in highly demanding production environments
          for several years. Although under constant development, MySQL
          Server today offers a rich and useful set of functions. Its
          connectivity, speed, and security make MySQL Server highly
          suited for accessing databases on the Internet.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>MySQL Server works in client/server or
          embedded systems.</strong></span>
        </p><p>
          The MySQL Database Software is a client/server system that
          consists of a multithreaded SQL server that supports different
          back ends, several different client programs and libraries,
          administrative tools, and a wide range of application
          programming interfaces (APIs).
        </p><p>
          We also provide MySQL Server as an embedded multithreaded
          library that you can link into your application to get a
          smaller, faster, easier-to-manage standalone product.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>A large amount of contributed MySQL
          software is available.</strong></span>
        </p><p>
          MySQL Server has a practical set of features developed in
          close cooperation with our users. It is very likely that your
          favorite application or language supports the MySQL Database
          Server.
</p></li></ul>
</div>
<a class="indexterm" name="idm46734431090320"></a><a class="indexterm" name="idm46734431088928"></a><p>
      The official way to pronounce <span class="quote">“<span class="quote">MySQL</span>”</span> is <span class="quote">“<span class="quote">My
      Ess Que Ell</span>”</span> (not <span class="quote">“<span class="quote">my sequel</span>”</span>), but we do not
      mind if you pronounce it as <span class="quote">“<span class="quote">my sequel</span>”</span> or in some
      other localized way.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="features"></a>1.3.2 The Main Features of MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734431084608"></a><a class="indexterm" name="idm46734431083600"></a><p>
      This section describes some of the important characteristics of
      the MySQL Database Software. In most respects, the roadmap applies
      to all versions of MySQL. For information about features as they
      are introduced into MySQL on a series-specific basis, see the
      <span class="quote">“<span class="quote">In a Nutshell</span>”</span> section of the appropriate Manual:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          MySQL 8.0: <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html" target="_top">What Is New in MySQL 8.0</a>
        </p></li><li class="listitem"><p>
          MySQL 5.7: <a class="xref" href="introduction.html#mysql-nutshell" title="1.4 What Is New in MySQL 5.7">Section 1.4, “What Is New in MySQL 5.7”</a>
        </p></li><li class="listitem"><p>
          MySQL 5.6: <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html" target="_top">What Is New in MySQL 5.6</a>
</p></li></ul>
</div>
<h4><a name="idm46734431076304"></a>Internals and Portability</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Written in C and C++.
        </p></li><li class="listitem"><p>
          Tested with a broad range of different compilers.
        </p></li><li class="listitem"><p>
          Works on many different platforms. See
          <a class="ulink" href="https://www.mysql.com/support/supportedplatforms/database.html" target="_top">https://www.mysql.com/support/supportedplatforms/database.html</a>.
        </p></li><li class="listitem"><p>
          For portability, uses <span class="command"><strong>CMake</strong></span> in MySQL 5.5
          and up. Previous series use GNU Automake, Autoconf, and
          Libtool.
        </p></li><li class="listitem"><p>
          Tested with Purify (a commercial memory leakage detector) as
          well as with Valgrind, a GPL tool
          (<a class="ulink" href="http://developer.kde.org/~sewardj/" target="_top">http://developer.kde.org/~sewardj/</a>).
        </p></li><li class="listitem"><p>
          Uses multi-layered server design with independent modules.
        </p></li><li class="listitem"><p>
          Designed to be fully multithreaded using kernel threads, to
          easily use multiple CPUs if they are available.
        </p></li><li class="listitem"><p>
          Provides transactional and nontransactional storage engines.
        </p></li><li class="listitem"><p>
          Uses very fast B-tree disk tables (<code class="literal">MyISAM</code>)
          with index compression.
        </p></li><li class="listitem"><p>
          Designed to make it relatively easy to add other storage
          engines. This is useful if you want to provide an SQL
          interface for an in-house database.
        </p></li><li class="listitem"><p>
          Uses a very fast thread-based memory allocation system.
        </p></li><li class="listitem"><p>
          Executes very fast joins using an optimized nested-loop join.
        </p></li><li class="listitem"><p>
          Implements in-memory hash tables, which are used as temporary
          tables.
        </p></li><li class="listitem"><p>
          Implements SQL functions using a highly optimized class
          library that should be as fast as possible. Usually there is
          no memory allocation at all after query initialization.
        </p></li><li class="listitem"><p>
          Provides the server as a separate program for use in a
          client/server networked environment, and as a library that can
          be embedded (linked) into standalone applications. Such
          applications can be used in isolation or in environments where
          no network is available.
</p></li></ul>
</div>
<h4><a name="idm46734431059936"></a>Data Types</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Many data types: signed/unsigned integers 1, 2, 3, 4, and 8
          bytes long, <a class="link" href="data-types.html#floating-point-types" title="11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE"><code class="literal">FLOAT</code></a>,
          <a class="link" href="data-types.html#floating-point-types" title="11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE"><code class="literal">DOUBLE</code></a>,
          <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">CHAR</code></a>,
          <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a>,
          <a class="link" href="data-types.html#binary-varbinary" title="11.3.3 The BINARY and VARBINARY Types"><code class="literal">BINARY</code></a>,
          <a class="link" href="data-types.html#binary-varbinary" title="11.3.3 The BINARY and VARBINARY Types"><code class="literal">VARBINARY</code></a>,
          <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">TEXT</code></a>,
          <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">BLOB</code></a>,
          <a class="link" href="data-types.html#datetime" title="11.2.2 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATE</code></a>,
          <a class="link" href="data-types.html#time" title="11.2.3 The TIME Type"><code class="literal">TIME</code></a>,
          <a class="link" href="data-types.html#datetime" title="11.2.2 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATETIME</code></a>,
          <a class="link" href="data-types.html#datetime" title="11.2.2 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">TIMESTAMP</code></a>,
          <a class="link" href="data-types.html#year" title="11.2.4 The YEAR Type"><code class="literal">YEAR</code></a>,
          <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a>,
          <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a>, and OpenGIS spatial
          types. See <a class="xref" href="data-types.html" title="Chapter 11 Data Types">Chapter 11, <i>Data Types</i></a>.
        </p></li><li class="listitem"><p>
          Fixed-length and variable-length string types.
</p></li></ul>
</div>
<h4><a name="idm46734431041824"></a>Statements and Functions</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Full operator and function support in the
          <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> list and
          <code class="literal">WHERE</code> clause of queries. For example:
        </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SELECT CONCAT(first_name, ' ', last_name)</code></strong>
    -&gt; <strong class="userinput"><code>FROM citizen</code></strong>
    -&gt; <strong class="userinput"><code>WHERE income/dependents &gt; 10000 AND age &gt; 30;</code></strong>
</pre></li><li class="listitem"><p>
          Full support for SQL <code class="literal">GROUP BY</code> and
          <code class="literal">ORDER BY</code> clauses. Support for group
          functions (<a class="link" href="functions.html#function_count"><code class="literal">COUNT()</code></a>,
          <a class="link" href="functions.html#function_avg"><code class="literal">AVG()</code></a>,
          <a class="link" href="functions.html#function_std"><code class="literal">STD()</code></a>,
          <a class="link" href="functions.html#function_sum"><code class="literal">SUM()</code></a>,
          <a class="link" href="functions.html#function_max"><code class="literal">MAX()</code></a>,
          <a class="link" href="functions.html#function_min"><code class="literal">MIN()</code></a>, and
          <a class="link" href="functions.html#function_group-concat"><code class="literal">GROUP_CONCAT()</code></a>).
        </p></li><li class="listitem"><p>
          Support for <code class="literal">LEFT OUTER JOIN</code> and
          <code class="literal">RIGHT OUTER JOIN</code> with both standard SQL and
          ODBC syntax.
        </p></li><li class="listitem"><p>
          Support for aliases on tables and columns as required by
          standard SQL.
        </p></li><li class="listitem"><p>
          Support for <a class="link" href="sql-statements.html#delete" title="13.2.2 DELETE Statement"><code class="literal">DELETE</code></a>,
          <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a>,
          <a class="link" href="sql-statements.html#replace" title="13.2.8 REPLACE Statement"><code class="literal">REPLACE</code></a>, and
          <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a> to return the number of
          rows that were changed (affected), or to return the number of
          rows matched instead by setting a flag when connecting to the
          server.
        </p></li><li class="listitem"><p>
          Support for MySQL-specific <a class="link" href="sql-statements.html#show" title="13.7.5 SHOW Statements"><code class="literal">SHOW</code></a>
          statements that retrieve information about databases, storage
          engines, tables, and indexes. Support for the
          <code class="literal">INFORMATION_SCHEMA</code> database, implemented
          according to standard SQL.
        </p></li><li class="listitem"><p>
          An <a class="link" href="sql-statements.html#explain" title="13.8.2 EXPLAIN Statement"><code class="literal">EXPLAIN</code></a> statement to show
          how the optimizer resolves a query.
        </p></li><li class="listitem"><p>
          Independence of function names from table or column names. For
          example, <code class="literal">ABS</code> is a valid column name. The
          only restriction is that for a function call, no spaces are
          permitted between the function name and the
          <span class="quote">“<span class="quote"><code class="literal">(</code></span>”</span> that follows it. See
          <a class="xref" href="language-structure.html#keywords" title="9.3 Keywords and Reserved Words">Section 9.3, “Keywords and Reserved Words”</a>.
        </p></li><li class="listitem"><p>
          You can refer to tables from different databases in the same
          statement.
</p></li></ul>
</div>
<h4><a name="idm46734431010448"></a>Security</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          A privilege and password system that is very flexible and
          secure, and that enables host-based verification.
        </p></li><li class="listitem"><p>
          Password security by encryption of all password traffic when
          you connect to a server.
</p></li></ul>
</div>
<h4><a name="idm46734431007616"></a>Scalability and Limits</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Support for large databases. We use MySQL Server with
          databases that contain 50 million records. We also know of
          users who use MySQL Server with 200,000 tables and about
          5,000,000,000 rows.
        </p></li><li class="listitem"><p>
          Support for up to 64 indexes per table. Each index may consist
          of 1 to 16 columns or parts of columns. The maximum index
          width for <a class="link" href="innodb-storage-engine.html" title="Chapter 14 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> tables is either
          767 bytes or 3072 bytes. See <a class="xref" href="innodb-storage-engine.html#innodb-limits" title="14.23 InnoDB Limits">Section 14.23, “InnoDB Limits”</a>.
          The maximum index width for
          <a class="link" href="storage-engines.html#myisam-storage-engine" title="15.2 The MyISAM Storage Engine"><code class="literal">MyISAM</code></a> tables is 1000 bytes. See
          <a class="xref" href="storage-engines.html#myisam-storage-engine" title="15.2 The MyISAM Storage Engine">Section 15.2, “The MyISAM Storage Engine”</a>. An index may use a
          prefix of a column for <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">CHAR</code></a>,
          <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a>,
          <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">BLOB</code></a>, or
          <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">TEXT</code></a> column types.
</p></li></ul>
</div>
<h4><a name="idm46734430997616"></a>Connectivity</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Clients can connect to MySQL Server using several protocols:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
              Clients can connect using TCP/IP sockets on any platform.
            </p></li><li class="listitem"><p>
              On Windows systems, clients can connect using named pipes
              if the server is started with the
              <a class="link" href="server-administration.html#sysvar_named_pipe"><code class="literal">named_pipe</code></a> system
              variable enabled. Windows servers also support
              shared-memory connections if started with the
              <a class="link" href="server-administration.html#sysvar_shared_memory"><code class="literal">shared_memory</code></a> system
              variable enabled. Clients can connect through shared
              memory by using the
              <a class="link" href="programs.html#option_general_protocol"><code class="option">--protocol=memory</code></a> option.
            </p></li><li class="listitem"><p>
              On Unix systems, clients can connect using Unix domain
              socket files.
</p></li></ul>
</div>
</li><li class="listitem"><p>
          MySQL client programs can be written in many languages. A
          client library written in C is available for clients written
          in C or C++, or for any language that provides C bindings.
        </p></li><li class="listitem"><p>
          APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and
          Tcl are available, enabling MySQL clients to be written in
          many languages. See <a class="xref" href="connectors-apis.html" title="Chapter 27 Connectors and APIs">Chapter 27, <i>Connectors and APIs</i></a>.
        </p></li><li class="listitem"><p>
          The Connector/ODBC (MyODBC) interface provides MySQL support
          for client programs that use ODBC (Open Database Connectivity)
          connections. For example, you can use MS Access to connect to
          your MySQL server. Clients can be run on Windows or Unix.
          Connector/ODBC source is available. All ODBC 2.5 functions are
          supported, as are many others. See
          <a class="ulink" href="https://dev.mysql.com/doc/connector-odbc/en/" target="_top">MySQL Connector/ODBC Developer Guide</a>.
        </p></li><li class="listitem"><p>
          The Connector/J interface provides MySQL support for Java
          client programs that use JDBC connections. Clients can be run
          on Windows or Unix. Connector/J source is available. See
          <a class="ulink" href="https://dev.mysql.com/doc/connector-j/5.1/en/" target="_top">MySQL Connector/J 5.1 Developer Guide</a>.
        </p></li><li class="listitem"><p>
          MySQL Connector/NET enables developers to easily create .NET applications
          that require secure, high-performance data connectivity with
          MySQL. It implements the required ADO.NET interfaces and
          integrates into ADO.NET aware tools. Developers can build
          applications using their choice of .NET languages. MySQL Connector/NET is
          a fully managed ADO.NET driver written in 100% pure C#. See
          <a class="ulink" href="https://dev.mysql.com/doc/connector-net/en/" target="_top">MySQL Connector/NET Developer Guide</a>.
</p></li></ul>
</div>
<h4><a name="idm46734430981888"></a>Localization</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          The server can provide error messages to clients in many
          languages. See <a class="xref" href="charset.html#error-message-language" title="10.12 Setting the Error Message Language">Section 10.12, “Setting the Error Message Language”</a>.
        </p></li><li class="listitem"><p>
          Full support for several different character sets, including
          <code class="literal">latin1</code> (cp1252), <code class="literal">german</code>,
          <code class="literal">big5</code>, <code class="literal">ujis</code>, several
          Unicode character sets, and more. For example, the
          Scandinavian characters <span class="quote">“<span class="quote"><code class="literal">å</code></span>”</span>,
          <span class="quote">“<span class="quote"><code class="literal">ä</code></span>”</span> and
          <span class="quote">“<span class="quote"><code class="literal">ö</code></span>”</span> are permitted in table
          and column names.
        </p></li><li class="listitem"><p>
          All data is saved in the chosen character set.
        </p></li><li class="listitem"><p>
          Sorting and comparisons are done according to the default
          character set and collation. is possible to change this when
          the MySQL server is started (see
          <a class="xref" href="charset.html#charset-server" title="10.3.2 Server Character Set and Collation">Section 10.3.2, “Server Character Set and Collation”</a>). To see an example of very
          advanced sorting, look at the Czech sorting code. MySQL Server
          supports many different character sets that can be specified
          at compile time and runtime.
        </p></li><li class="listitem"><p>
          The server time zone can be changed dynamically, and
          individual clients can specify their own time zone. See
          <a class="xref" href="server-administration.html#time-zone-support" title="5.1.13 MySQL Server Time Zone Support">Section 5.1.13, “MySQL Server Time Zone Support”</a>.
</p></li></ul>
</div>
<h4><a name="idm46734430969792"></a>Clients and Tools</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          MySQL includes several client and utility programs. These
          include both command-line programs such as
          <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> and
          <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin</strong></span></a>, and graphical programs such as
          <a class="link" href="workbench.html" title="Chapter 30 MySQL Workbench">MySQL Workbench</a>.
        </p></li><li class="listitem"><p>
          MySQL Server has built-in support for SQL statements to check,
          optimize, and repair tables. These statements are available
          from the command line through the
          <a class="link" href="programs.html#mysqlcheck" title="4.5.3 mysqlcheck — A Table Maintenance Program"><span class="command"><strong>mysqlcheck</strong></span></a> client. MySQL also includes
          <a class="link" href="programs.html#myisamchk" title="4.6.3 myisamchk — MyISAM Table-Maintenance Utility"><span class="command"><strong>myisamchk</strong></span></a>, a very fast command-line utility
          for performing these operations on <code class="literal">MyISAM</code>
          tables. See <a class="xref" href="programs.html" title="Chapter 4 MySQL Programs">Chapter 4, <i>MySQL Programs</i></a>.
        </p></li><li class="listitem"><p>
          MySQL programs can be invoked with the <code class="option">--help</code>
          or <code class="option">-?</code> option to obtain online assistance.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="history"></a>1.3.3 History of MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734430958640"></a><a class="indexterm" name="idm46734430957632"></a><a class="indexterm" name="idm46734430956624"></a><a class="indexterm" name="idm46734430955616"></a><a class="indexterm" name="idm46734430954224"></a><a class="indexterm" name="idm46734430953216"></a><p>
      We started out with the intention of using the
      <code class="literal">mSQL</code> database system to connect to our tables
      using our own fast low-level (ISAM) routines. However, after some
      testing, we came to the conclusion that <code class="literal">mSQL</code>
      was not fast enough or flexible enough for our needs. This
      resulted in a new SQL interface to our database but with almost
      the same API interface as <code class="literal">mSQL</code>. This API was
      designed to enable third-party code that was written for use with
      <code class="literal">mSQL</code> to be ported easily for use with MySQL.
    </p><p>
      MySQL is named after co-founder Monty Widenius's daughter, My.
    </p><p>
      The name of the MySQL Dolphin (our logo) is <span class="quote">“<span class="quote">Sakila,</span>”</span>
      which was chosen from a huge list of names suggested by users in
      our <span class="quote">“<span class="quote">Name the Dolphin</span>”</span> contest. The winning name was
      submitted by Ambrose Twebaze, an Open Source software developer
      from Swaziland, Africa. According to Ambrose, the feminine name
      Sakila has its roots in SiSwati, the local language of Swaziland.
      Sakila is also the name of a town in Arusha, Tanzania, near
      Ambrose's country of origin, Uganda.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="mysql-nutshell"></a>1.4 What Is New in MySQL 5.7</h2>

</div>

</div>

</div>
<p>
      This section summarizes what has been added to, deprecated in, and
      removed from MySQL 5.7. A companion section lists
      MySQL server options and variables that have been added,
      deprecated, or removed in MySQL 5.7. See
      <a class="xref" href="introduction.html#added-deprecated-removed" title="1.5 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 5.7">Section 1.5, “Server and Status Variables and Options Added, Deprecated, or Removed in
    MySQL 5.7”</a>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <a class="xref" href="introduction.html#mysql-nutshell-additions" title="Features Added in MySQL 5.7">Features Added in MySQL 5.7</a>
        </p></li><li class="listitem"><p>
          <a class="xref" href="introduction.html#mysql-nutshell-deprecations" title="Features Deprecated in MySQL 5.7">Features Deprecated in MySQL 5.7</a>
        </p></li><li class="listitem"><p>
          <a class="xref" href="introduction.html#mysql-nutshell-removals" title="Features Removed in MySQL 5.7">Features Removed in MySQL 5.7</a>
</p></li></ul>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="mysql-nutshell-additions"></a>Features Added in MySQL 5.7</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734430939712"></a><a class="indexterm" name="idm46734430938704"></a><p>
        The following features have been added to MySQL
        5.7:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><b>Security improvements. </b>
              These security enhancements were added:
</p><a class="indexterm" name="idm46734430935088"></a><a class="indexterm" name="idm46734430933696"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                In MySQL 8.0, <code class="literal">caching_sha2_password</code>
                is the default authentication plugin. To enable MySQL
                5.7 clients to connect to 8.0 servers using accounts
                that authenticate using
                <code class="literal">caching_sha2_password</code>, the MySQL 5.7
                client library and client programs support the
                <code class="literal">caching_sha2_password</code> client-side
                authentication plugin as of MySQL 5.7.23. This improves
                compatibility of MySQL 5.7 with MySQL 8.0 and higher
                servers. See
                <a class="xref" href="security.html#caching-sha2-pluggable-authentication" title="6.4.1.4 Caching SHA-2 Pluggable Authentication">Section 6.4.1.4, “Caching SHA-2 Pluggable Authentication”</a>.
              </p></li><li class="listitem"><p>
                The server now requires account rows in the
                <code class="literal">mysql.user</code> system table to have a
                nonempty <code class="literal">plugin</code> column value and
                disables accounts with an empty value. For server
                upgrade instructions, see
                <a class="xref" href="installing.html#upgrading-from-previous-series" title="2.11.3 Changes in MySQL 5.7">Section 2.11.3, “Changes in MySQL 5.7”</a>. DBAs
                are advised to also convert accounts that use the
                <code class="literal">mysql_old_password</code> authentication
                plugin to use <code class="literal">mysql_native_password</code>
                instead, because support for
                <code class="literal">mysql_old_password</code> has been removed.
                For account upgrade instructions, see
                <a class="xref" href="security.html#account-upgrades" title="6.4.1.3 Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin">Section 6.4.1.3, “Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password
        Plugin”</a>.
              </p></li><li class="listitem"><p>
                MySQL now enables database administrators to establish a
                policy for automatic password expiration: Any user who
                connects to the server using an account for which the
                password is past its permitted lifetime must change the
                password. For more information, see
                <a class="xref" href="security.html#password-management" title="6.2.11 Password Management">Section 6.2.11, “Password Management”</a>.
              </p></li><li class="listitem"><p>
                Administrators can lock and unlock accounts for better
                control over who can log in. For more information, see
                <a class="xref" href="security.html#account-locking" title="6.2.15 Account Locking">Section 6.2.15, “Account Locking”</a>.
              </p></li><li class="listitem"><p>
                To make it easier to support secure connections, MySQL
                servers compiled using OpenSSL can automatically
                generate missing SSL and RSA certificate and key files
                at startup. See
                <a class="xref" href="security.html#creating-ssl-rsa-files-using-mysql" title="6.3.3.1 Creating SSL and RSA Certificates and Keys using MySQL">Section 6.3.3.1, “Creating SSL and RSA Certificates and Keys using MySQL”</a>.
              </p><p>
                All servers, if not configured for SSL explicitly,
                attempt to enable SSL automatically at startup if they
                find the requisite SSL files in the data directory. See
                <a class="xref" href="security.html#using-encrypted-connections" title="6.3.1 Configuring MySQL to Use Encrypted Connections">Section 6.3.1, “Configuring MySQL to Use Encrypted Connections”</a>.
              </p><p>
                In addition, MySQL distributions include a
                <a class="link" href="programs.html#mysql-ssl-rsa-setup" title="4.4.5 mysql_ssl_rsa_setup — Create SSL/RSA Files"><span class="command"><strong>mysql_ssl_rsa_setup</strong></span></a> utility that can
                be invoked manually to create SSL and RSA key and
                certificate files. For more information, see
                <a class="xref" href="programs.html#mysql-ssl-rsa-setup" title="4.4.5 mysql_ssl_rsa_setup — Create SSL/RSA Files">Section 4.4.5, “<span class="command"><strong>mysql_ssl_rsa_setup</strong></span> — Create SSL/RSA Files”</a>.
              </p></li><li class="listitem"><p>
                MySQL deployments installed using <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld
                --initialize</strong></span></a> are secure by default. The
                following changes have been implemented as the default
                deployment characteristics:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    The installation process creates only a single
                    <code class="literal">root</code> account,
                    <code class="literal">'root'@'localhost'</code>, automatically
                    generates a random password for this account, and
                    marks the password expired. The MySQL administrator
                    must connect as <code class="literal">root</code> using the
                    random password and assign a new password. (The
                    server writes the random password to the error log.)
                  </p></li><li class="listitem"><p>
                    Installation creates no anonymous-user accounts.
                  </p></li><li class="listitem"><p>
                    Installation creates no <code class="literal">test</code>
                    database.
</p></li></ul>
</div>
<p>
                For more information, see
                <a class="xref" href="installing.html#data-directory-initialization" title="2.10.1 Initializing the Data Directory">Section 2.10.1, “Initializing the Data Directory”</a>.
              </p></li><li class="listitem"><p>
                MySQL Enterprise Edition now provides data masking and de-identification
                capabilities. Data masking hides sensitive information
                by replacing real values with substitutes. MySQL Enterprise Data Masking and De-Identification
                functions enable masking existing data using several
                methods such as obfuscation (removing identifying
                characteristics), generation of formatted random data,
                and data replacement or substitution. For more
                information, see <a class="xref" href="security.html#data-masking" title="6.4.7 MySQL Enterprise Data Masking and De-Identification">Section 6.4.7, “MySQL Enterprise Data Masking and De-Identification”</a>.
              </p></li><li class="listitem"><p>
                MySQL now sets the access control granted to clients on
                the named pipe to the minimum necessary for successful
                communication on Windows. Newer MySQL client software
                can open named pipe connections without any additional
                configuration. If older client software cannot be
                upgraded immediately, the new
                <a class="link" href="server-administration.html#sysvar_named_pipe_full_access_group"><code class="literal">named_pipe_full_access_group</code></a>
                system variable can be used to give a Windows group the
                necessary permissions to open a named pipe connection.
                Membership in the full-access group should be restricted
                and temporary.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>SQL mode changes. </b>
              Strict SQL mode for transactional storage engines
              (<a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a>) is
              now enabled by default.
            </p><a class="indexterm" name="idm46734430898992"></a><a class="indexterm" name="idm46734430897600"></a><p>
            Implementation for the
            <a class="link" href="server-administration.html#sqlmode_only_full_group_by"><code class="literal">ONLY_FULL_GROUP_BY</code></a> SQL
            mode has been made more sophisticated, to no longer reject
            deterministic queries that previously were rejected. In
            consequence, this mode is now enabled by default, to
            prohibit only nondeterministic queries containing
            expressions not guaranteed to be uniquely determined within
            a group.
          </p><p>
            The
            <a class="link" href="server-administration.html#sqlmode_error_for_division_by_zero"><code class="literal">ERROR_FOR_DIVISION_BY_ZERO</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_zero_date"><code class="literal">NO_ZERO_DATE</code></a>, and
            <a class="link" href="server-administration.html#sqlmode_no_zero_in_date"><code class="literal">NO_ZERO_IN_DATE</code></a> SQL modes
            are now deprecated but enabled by default. The long term
            plan is to have them included in strict SQL mode and to
            remove them as explicit modes in a future MySQL release. See
            <a class="xref" href="server-administration.html#sql-mode-changes" title="SQL Mode Changes in MySQL 5.7">SQL Mode Changes in MySQL 5.7</a>.
          </p><p>
            The changes to the default SQL mode result in a default
            <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system variable
            value with these modes enabled:
            <a class="link" href="server-administration.html#sqlmode_only_full_group_by"><code class="literal">ONLY_FULL_GROUP_BY</code></a>,
            <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_zero_in_date"><code class="literal">NO_ZERO_IN_DATE</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_zero_date"><code class="literal">NO_ZERO_DATE</code></a>,
            <a class="link" href="server-administration.html#sqlmode_error_for_division_by_zero"><code class="literal">ERROR_FOR_DIVISION_BY_ZERO</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_auto_create_user"><code class="literal">NO_AUTO_CREATE_USER</code></a>, and
            <a class="link" href="server-administration.html#sqlmode_no_engine_substitution"><code class="literal">NO_ENGINE_SUBSTITUTION</code></a>.
          </p></li><li class="listitem"><p><b>Online ALTER TABLE. </b>
              <code class="literal">ALTER TABLE</code> now supports a
              <code class="literal">RENAME INDEX</code> clause that renames an
              index. The change is made in place without a table-copy
              operation. It works for all storage engines. See
              <a class="xref" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement">Section 13.1.8, “ALTER TABLE Statement”</a>.
            </p><a class="indexterm" name="idm46734430878736"></a><a class="indexterm" name="idm46734430877344"></a></li><li class="listitem"><p><b>ngram and MeCab full-text parser plugins. </b>
              MySQL provides a built-in full-text ngram parser plugin
              that supports Chinese, Japanese, and Korean (CJK), and an
              installable MeCab full-text parser plugin for Japanese.
            </p><a class="indexterm" name="idm46734430874176"></a><a class="indexterm" name="idm46734430872784"></a><a class="indexterm" name="idm46734430871392"></a><a class="indexterm" name="idm46734430870000"></a><p>
            For more information, see
            <a class="xref" href="functions.html#fulltext-search-ngram" title="12.9.8 ngram Full-Text Parser">Section 12.9.8, “ngram Full-Text Parser”</a>, and
            <a class="xref" href="functions.html#fulltext-search-mecab" title="12.9.9 MeCab Full-Text Parser Plugin">Section 12.9.9, “MeCab Full-Text Parser Plugin”</a>.
          </p></li><li class="listitem"><p><b>InnoDB enhancements. </b>
              These <code class="literal">InnoDB</code> enhancements were added:
</p><a class="indexterm" name="idm46734430865072"></a><a class="indexterm" name="idm46734430863680"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> column size can
                be increased using an in-place
                <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a>, as in this
                example:
              </p><pre data-lang="sql" class="programlisting">ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);</pre><p>
                This is true as long as the number of length bytes
                required by a <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a>
                column remains the same. For
                <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> columns of 0 to
                255 bytes in size, one length byte is required to encode
                the value. For <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a>
                columns of 256 bytes in size or more, two length bytes
                are required. As a result, in-place
                <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a> only supports
                increasing <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> column
                size from 0 to 255 bytes, or from 256 bytes to a greater
                size. In-place <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER
                TABLE</code></a> does not support increasing the size of
                a <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> column from
                less than 256 bytes to a size equal to or greater than
                256 bytes. In this case, the number of required length
                bytes changes from 1 to 2, which is only supported by a
                table copy (<code class="literal">ALGORITHM=COPY</code>).
              </p><p>
                Decreasing <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> size
                using in-place <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER
                TABLE</code></a> is not supported. Decreasing
                <a class="link" href="data-types.html#char" title="11.3.2 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> size requires a
                table copy (<code class="literal">ALGORITHM=COPY</code>).
              </p><p>
                For more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-online-ddl-operations" title="14.13.1 Online DDL Operations">Section 14.13.1, “Online DDL Operations”</a>.
              </p></li><li class="listitem"><p>
                DDL performance for <code class="literal">InnoDB</code> temporary
                tables is improved through optimization of
                <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE TABLE</code></a>,
                <a class="link" href="sql-statements.html#drop-table" title="13.1.29 DROP TABLE Statement"><code class="literal">DROP TABLE</code></a>,
                <a class="link" href="sql-statements.html#truncate-table" title="13.1.34 TRUNCATE TABLE Statement"><code class="literal">TRUNCATE TABLE</code></a>, and
                <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a> statements.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> temporary table metadata is no
                longer stored to <code class="literal">InnoDB</code> system
                tables. Instead, a new table,
                <code class="literal">INNODB_TEMP_TABLE_INFO</code>, provides
                users with a snapshot of active temporary tables. The
                table contains metadata and reports on all user and
                system-created temporary tables that are active within a
                given <code class="literal">InnoDB</code> instance. The table is
                created when the first <code class="literal">SELECT</code>
                statement is run against it.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> now supports MySQL-supported
                spatial data types. Prior to this release,
                <code class="literal">InnoDB</code> would store spatial data as
                binary <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">BLOB</code></a> data.
                <code class="literal">BLOB</code> remains the underlying data type
                but spatial data types are now mapped to a new
                <code class="literal">InnoDB</code> internal data type,
                <code class="literal">DATA_GEOMETRY</code>.
              </p></li><li class="listitem"><p>
                There is now a separate tablespace for all
                non-compressed <code class="literal">InnoDB</code> temporary
                tables. The new tablespace is always recreated on server
                startup and is located in <code class="literal">DATADIR</code> by
                default. A newly added configuration file option,
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_temp_data_file_path"><code class="literal">innodb_temp_data_file_path</code></a>,
                allows for a user-defined temporary data file path.
              </p></li><li class="listitem"><p>
                <a class="link" href="programs.html#innochecksum" title="4.6.1 innochecksum — Offline InnoDB File Checksum Utility"><span class="command"><strong>innochecksum</strong></span></a> functionality is
                enhanced with several new options and extended
                capabilities. See <a class="xref" href="programs.html#innochecksum" title="4.6.1 innochecksum — Offline InnoDB File Checksum Utility">Section 4.6.1, “<span class="command"><strong>innochecksum</strong></span> — Offline InnoDB File Checksum Utility”</a>.
              </p></li><li class="listitem"><p>
                A new type of non-redo undo log for both normal and
                compressed temporary tables and related objects now
                resides in the temporary tablespace. For more
                information, see <a class="xref" href="innodb-storage-engine.html#innodb-undo-logs" title="14.6.7 Undo Logs">Section 14.6.7, “Undo Logs”</a>.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> buffer pool dump and load
                operations are enhanced. A new system variable,
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_dump_pct"><code class="literal">innodb_buffer_pool_dump_pct</code></a>,
                allows you to specify the percentage of most recently
                used pages in each buffer pool to read out and dump.
                When there is other I/O activity being performed by
                <code class="literal">InnoDB</code> background tasks,
                <code class="literal">InnoDB</code> attempts to limit the number
                of buffer pool load operations per second using the
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_io_capacity"><code class="literal">innodb_io_capacity</code></a>
                setting.
              </p></li><li class="listitem"><p>
                Support is added to <code class="literal">InnoDB</code> for
                full-text parser plugins. For information about
                full-text parser plugins, see
                <a class="xref" href="extending-mysql.html#full-text-plugin-type" title="Full-Text Parser Plugins">Full-Text Parser Plugins</a> and
                <a class="xref" href="extending-mysql.html#writing-full-text-plugins" title="28.2.4.4 Writing Full-Text Parser Plugins">Section 28.2.4.4, “Writing Full-Text Parser Plugins”</a>.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> supports multiple page cleaner
                threads for flushing dirty pages from buffer pool
                instances. A new system variable,
                <code class="literal">innodb_page_cleaners</code>, is used to
                specify the number of page cleaner threads. The default
                value of <code class="literal">1</code> maintains the previous
                configuration in which there is a single page cleaner
                thread. This enhancement builds on work completed in
                MySQL 5.6, which introduced a single page cleaner thread
                to offload buffer pool flushing work from the
                <code class="literal">InnoDB</code> master thread.
              </p></li><li class="listitem"><p>
                <a class="link" href="innodb-storage-engine.html#innodb-online-ddl" title="14.13 InnoDB and Online DDL">Online DDL</a>
                support is extended to the following operations for
                regular and partitioned <code class="literal">InnoDB</code>
                tables:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    <a class="link" href="sql-statements.html#optimize-table" title="13.7.2.4 OPTIMIZE TABLE Statement"><code class="literal">OPTIMIZE TABLE</code></a>
                  </p></li><li class="listitem"><p>
                    <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER
                    TABLE ... FORCE</code></a>
                  </p></li><li class="listitem"><p>
                    <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER
                    TABLE ... ENGINE=INNODB</code></a> (when run on an
                    <code class="literal">InnoDB</code> table)
                  </p><p>
                    <a class="link" href="innodb-storage-engine.html#innodb-online-ddl" title="14.13 InnoDB and Online DDL">Online DDL</a>
                    support reduces table rebuild time and permits
                    concurrent DML. See
                    <a class="xref" href="innodb-storage-engine.html#innodb-online-ddl" title="14.13 InnoDB and Online DDL">Section 14.13, “InnoDB and Online DDL”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
                The Fusion-io Non-Volatile Memory (NVM) file system on
                Linux provides <a class="link" href="glossary.html#glos_atomic" title="atomic">atomic</a>
                write capability, which makes the
                <code class="literal">InnoDB</code>
                <a class="link" href="glossary.html#glos_doublewrite_buffer" title="doublewrite buffer">doublewrite
                buffer</a> redundant. The <code class="literal">InnoDB</code>
                doublewrite buffer is automatically disabled for system
                tablespace files
                (<a class="link" href="glossary.html#glos_ibdata_file" title="ibdata file">ibdata files</a>)
                located on Fusion-io devices that support atomic writes.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> supports the
                <a class="link" href="glossary.html#glos_transportable_tablespace" title="transportable tablespace">Transportable
                Tablespace</a> feature for partitioned
                <code class="literal">InnoDB</code> tables and individual
                <code class="literal">InnoDB</code> table partitions. This
                enhancement eases backup procedures for partitioned
                tables and enables copying of partitioned tables and
                individual table partitions between MySQL instances. For
                more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-table-import" title="14.6.1.3 Importing InnoDB Tables">Section 14.6.1.3, “Importing InnoDB Tables”</a>.
              </p></li><li class="listitem"><p>
                The
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_size"><code class="literal">innodb_buffer_pool_size</code></a>
                parameter is dynamic, allowing you to resize the buffer
                pool without restarting the server. The resizing
                operation, which involves moving pages to a new location
                in memory, is performed in chunks. Chunk size is
                configurable using the new
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_chunk_size"><code class="literal">innodb_buffer_pool_chunk_size</code></a>
                configuration option. You can monitor resizing progress
                using the new
                <a class="link" href="server-administration.html#statvar_Innodb_buffer_pool_resize_status"><code class="literal">Innodb_buffer_pool_resize_status</code></a>
                status variable. For more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-buffer-pool-online-resize" title="Configuring InnoDB Buffer Pool Size Online">Configuring InnoDB Buffer Pool Size Online</a>.
              </p></li><li class="listitem"><p>
                Multithreaded page cleaner support
                (<a class="link" href="innodb-storage-engine.html#sysvar_innodb_page_cleaners"><code class="literal">innodb_page_cleaners</code></a>)
                is extended to shutdown and recovery phases.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> supports indexing of spatial
                data types using <code class="literal">SPATIAL</code> indexes,
                including use of
                <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE
                ... ALGORITHM=INPLACE</code></a> for online operations
                (<code class="literal">ADD SPATIAL INDEX</code>).
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> performs a bulk load when
                creating or rebuilding indexes. This method of index
                creation is known as a <span class="quote">“<span class="quote">sorted index
                build</span>”</span>. This enhancement, which improves the
                efficiency of index creation, also applies to full-text
                indexes. A new global configuration option,
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_fill_factor"><code class="literal">innodb_fill_factor</code></a>,
                defines the percentage of space on each page that is
                filled with data during a sorted index build, with the
                remaining space reserved for future index growth. For
                more information, see
                <a class="xref" href="innodb-storage-engine.html#sorted-index-builds" title="14.6.2.3 Sorted Index Builds">Section 14.6.2.3, “Sorted Index Builds”</a>.
              </p></li><li class="listitem"><p>
                A new log record type
                (<code class="literal">MLOG_FILE_NAME</code>) is used to identify
                tablespaces that have been modified since the last
                checkpoint. This enhancement simplifies tablespace
                discovery during crash recovery and eliminates scans on
                the file system prior to redo log application. For more
                information about the benefits of this enhancement, see
                <a class="xref" href="innodb-storage-engine.html#innodb-recovery-tablespace-discovery" title="Tablespace Discovery During Crash Recovery">Tablespace Discovery During Crash Recovery</a>.
              </p><p>
                This enhancement changes the redo log format, requiring
                that MySQL be shut down cleanly before upgrading to or
                downgrading from MySQL 5.7.5.
              </p></li><li class="listitem"><p>
                You can truncate undo logs that reside in undo
                tablespaces. This feature is enabled using the
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_log_truncate"><code class="literal">innodb_undo_log_truncate</code></a>
                configuration option. For more information, see
                <a class="xref" href="innodb-storage-engine.html#truncate-undo-tablespace" title="Truncating Undo Tablespaces">Truncating Undo Tablespaces</a>.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> supports native partitioning.
                Previously, <code class="literal">InnoDB</code> relied on the
                <code class="literal">ha_partition</code> handler, which creates a
                handler object for each partition. With native
                partitioning, a partitioned <code class="literal">InnoDB</code>
                table uses a single partition-aware handler object. This
                enhancement reduces the amount of memory required for
                partitioned <code class="literal">InnoDB</code> tables.
              </p><p>
                As of MySQL 5.7.9, <a class="link" href="programs.html#mysql-upgrade" title="4.4.7 mysql_upgrade — Check and Upgrade MySQL Tables"><span class="command"><strong>mysql_upgrade</strong></span></a>
                looks for and attempts to upgrade partitioned
                <code class="literal">InnoDB</code> tables that were created using
                the <code class="literal">ha_partition</code> handler. Also in
                MySQL 5.7.9 and later, you can upgrade such tables by
                name in the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> client using
                <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE
                ... UPGRADE PARTITIONING</code></a>.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> supports the creation of
                general tablespaces using <a class="link" href="sql-statements.html#create-tablespace" title="13.1.19 CREATE TABLESPACE Statement"><code class="literal">CREATE
                TABLESPACE</code></a> syntax.
              </p><pre data-lang="sql" class="programlisting">CREATE TABLESPACE `tablespace_name`
  ADD DATAFILE 'file_name.ibd'
  [FILE_BLOCK_SIZE = n]</pre><p>
                General tablespaces can be created outside of the MySQL
                data directory, are capable of holding multiple tables,
                and support tables of all row formats.
              </p><p>
                Tables are added to a general tablespace using
                <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE
                TABLE <em class="replaceable"><code>tbl_name</code></em> ... TABLESPACE
                [=] <em class="replaceable"><code>tablespace_name</code></em></code></a>
                or <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER
                TABLE <em class="replaceable"><code>tbl_name</code></em> TABLESPACE [=]
                <em class="replaceable"><code>tablespace_name</code></em></code></a>
                syntax.
              </p><p>
                For more information, see
                <a class="xref" href="innodb-storage-engine.html#general-tablespaces" title="14.6.3.3 General Tablespaces">Section 14.6.3.3, “General Tablespaces”</a>.
              </p></li><li class="listitem"><p>
                <code class="literal">DYNAMIC</code> replaces
                <code class="literal">COMPACT</code> as the implicit default row
                format for <code class="literal">InnoDB</code> tables. A new
                configuration option,
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_default_row_format"><code class="literal">innodb_default_row_format</code></a>,
                specifies the default <code class="literal">InnoDB</code> row
                format. For more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-row-format-defining" title="Defining the Row Format of a Table">Defining the Row Format of a Table</a>.
              </p></li><li class="listitem"><p>
                As of MySQL 5.7.11, <code class="literal">InnoDB</code> supports
                data-at-rest encryption for file-per-table tablespaces.
                Encryption is enabled by specifying the
                <code class="literal">ENCRYPTION</code> option when creating or
                altering an <code class="literal">InnoDB</code> table. This
                feature relies on a <code class="literal">keyring</code> plugin
                for encryption key management. For more information, see
                <a class="xref" href="security.html#keyring" title="6.4.4 The MySQL Keyring">Section 6.4.4, “The MySQL Keyring”</a>, and
                <a class="xref" href="innodb-storage-engine.html#innodb-data-encryption" title="14.14 InnoDB Data-at-Rest Encryption">Section 14.14, “InnoDB Data-at-Rest Encryption”</a>.
              </p></li><li class="listitem"><p>
                As of MySQL 5.7.24, the
                <a class="ulink" href="http://www.zlib.net/" target="_top">zlib library</a>
                version bundled with MySQL was raised from version 1.2.3
                to version 1.2.11. MySQL implements compression with the
                help of the zlib library.
              </p><p>
                If you use <code class="literal">InnoDB</code> compressed tables,
                see <a class="xref" href="installing.html#upgrading-from-previous-series" title="2.11.3 Changes in MySQL 5.7">Section 2.11.3, “Changes in MySQL 5.7”</a> for
                related upgrade implications.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>JSON support. </b>
              Beginning with MySQL 5.7.8, MySQL supports a native
              <a class="link" href="data-types.html#json" title="11.5 The JSON Data Type"><code class="literal">JSON</code></a> type. JSON values are
              not stored as strings, instead using an internal binary
              format that permits quick read access to document
              elements. JSON documents stored in <code class="literal">JSON</code>
              columns are automatically validated whenever they are
              inserted or updated, with an invalid document producing an
              error. JSON documents are normalized on creation, and can
              be compared using most comparison operators such as
              <code class="literal">=</code>, <code class="literal">&lt;</code>,
              <code class="literal">&lt;=</code>, <code class="literal">&gt;</code>,
              <code class="literal">&gt;=</code>, <code class="literal">&lt;&gt;</code>,
              <code class="literal">!=</code>, and <code class="literal">&lt;=&gt;</code>;
              for information about supported operators as well as
              precedence and other rules that MySQL follows when
              comparing <code class="literal">JSON</code> values, see
              <a class="xref" href="data-types.html#json-comparison" title="Comparison and Ordering of JSON Values">Comparison and Ordering of JSON Values</a>.
            </p><a class="indexterm" name="idm46734430732176"></a><a class="indexterm" name="idm46734430730784"></a><p>
            MySQL 5.7.8 also introduces a number of functions for
            working with <a class="link" href="data-types.html#json" title="11.5 The JSON Data Type"><code class="literal">JSON</code></a> values.
            These functions include those listed here:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Functions that create <code class="literal">JSON</code> values:
                <a class="link" href="functions.html#function_json-array"><code class="literal">JSON_ARRAY()</code></a>,
                <a class="link" href="functions.html#function_json-merge"><code class="literal">JSON_MERGE()</code></a>, and
                <a class="link" href="functions.html#function_json-object"><code class="literal">JSON_OBJECT()</code></a>. See
                <a class="xref" href="functions.html#json-creation-functions" title="12.17.2 Functions That Create JSON Values">Section 12.17.2, “Functions That Create JSON Values”</a>.
              </p></li><li class="listitem"><p>
                Functions that search <code class="literal">JSON</code> values:
                <a class="link" href="functions.html#function_json-contains"><code class="literal">JSON_CONTAINS()</code></a>,
                <a class="link" href="functions.html#function_json-contains-path"><code class="literal">JSON_CONTAINS_PATH()</code></a>,
                <a class="link" href="functions.html#function_json-extract"><code class="literal">JSON_EXTRACT()</code></a>,
                <a class="link" href="functions.html#function_json-keys"><code class="literal">JSON_KEYS()</code></a>, and
                <a class="link" href="functions.html#function_json-search"><code class="literal">JSON_SEARCH()</code></a>. See
                <a class="xref" href="functions.html#json-search-functions" title="12.17.3 Functions That Search JSON Values">Section 12.17.3, “Functions That Search JSON Values”</a>.
              </p></li><li class="listitem"><p>
                Functions that modify <code class="literal">JSON</code> values:
                <a class="link" href="functions.html#function_json-append"><code class="literal">JSON_APPEND()</code></a>,
                <a class="link" href="functions.html#function_json-array-append"><code class="literal">JSON_ARRAY_APPEND()</code></a>,
                <a class="link" href="functions.html#function_json-array-insert"><code class="literal">JSON_ARRAY_INSERT()</code></a>,
                <a class="link" href="functions.html#function_json-insert"><code class="literal">JSON_INSERT()</code></a>,
                <a class="link" href="functions.html#function_json-quote"><code class="literal">JSON_QUOTE()</code></a>,
                <a class="link" href="functions.html#function_json-remove"><code class="literal">JSON_REMOVE()</code></a>,
                <a class="link" href="functions.html#function_json-replace"><code class="literal">JSON_REPLACE()</code></a>,
                <a class="link" href="functions.html#function_json-set"><code class="literal">JSON_SET()</code></a>, and
                <a class="link" href="functions.html#function_json-unquote"><code class="literal">JSON_UNQUOTE()</code></a>. See
                <a class="xref" href="functions.html#json-modification-functions" title="12.17.4 Functions That Modify JSON Values">Section 12.17.4, “Functions That Modify JSON Values”</a>.
              </p></li><li class="listitem"><p>
                Functions that provide information about
                <code class="literal">JSON</code> values:
                <a class="link" href="functions.html#function_json-depth"><code class="literal">JSON_DEPTH()</code></a>,
                <a class="link" href="functions.html#function_json-length"><code class="literal">JSON_LENGTH()</code></a>,
                <a class="link" href="functions.html#function_json-type"><code class="literal">JSON_TYPE()</code></a>, and
                <a class="link" href="functions.html#function_json-valid"><code class="literal">JSON_VALID()</code></a>. See
                <a class="xref" href="functions.html#json-attribute-functions" title="12.17.5 Functions That Return JSON Value Attributes">Section 12.17.5, “Functions That Return JSON Value Attributes”</a>.
</p></li></ul>
</div>
<p>
            In MySQL 5.7.9 and later, you can use
            <a class="link" href="functions.html#operator_json-column-path"><code class="literal"><em class="replaceable"><code>column</code></em>-&gt;<em class="replaceable"><code>path</code></em></code></a>
            as shorthand for
            <a class="link" href="functions.html#function_json-extract"><code class="literal">JSON_EXTRACT(<em class="replaceable"><code>column</code></em>,
            <em class="replaceable"><code>path</code></em>)</code></a>. This works as an
            alias for a column wherever a column identifier can occur in
            an SQL statement, including <code class="literal">WHERE</code>,
            <code class="literal">ORDER BY</code>, and <code class="literal">GROUP BY</code>
            clauses. This includes
            <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a>,
            <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a>,
            <a class="link" href="sql-statements.html#delete" title="13.2.2 DELETE Statement"><code class="literal">DELETE</code></a>,
            <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE TABLE</code></a>, and other SQL
            statements. The left hand side must be a
            <a class="link" href="data-types.html#json" title="11.5 The JSON Data Type"><code class="literal">JSON</code></a> column identifier (and
            not an alias). The right hand side is a quoted JSON path
            expression which is evaluated against the JSON document
            returned as the column value.
          </p><p>
            MySQL 5.7.22 adds the following JSON functions:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Two JSON aggregation functions
                <a class="link" href="functions.html#function_json-arrayagg"><code class="literal">JSON_ARRAYAGG()</code></a> and
                <a class="link" href="functions.html#function_json-objectagg"><code class="literal">JSON_OBJECTAGG()</code></a>.
                <code class="literal">JSON_ARRAYAGG()</code> takes a column or
                expression as its argument, and aggregates the result as
                a single <a class="link" href="data-types.html#json" title="11.5 The JSON Data Type"><code class="literal">JSON</code></a> array. The
                expression can evaluate to any MySQL data type; this
                does not have to be a <code class="literal">JSON</code> value.
                <code class="literal">JSON_OBJECTAGG()</code> takes two columns or
                expressions which it interprets as a key and a value; it
                returns the result as a single <code class="literal">JSON</code>
                object. For more information and examples, see
                <a class="xref" href="functions.html#group-by-functions-and-modifiers" title="12.20 Aggregate (GROUP BY) Functions">Section 12.20, “Aggregate (GROUP BY) Functions”</a>.
              </p></li><li class="listitem"><p>
                The JSON utility function
                <a class="link" href="functions.html#function_json-pretty"><code class="literal">JSON_PRETTY()</code></a>, which
                outputs an existing <a class="link" href="data-types.html#json" title="11.5 The JSON Data Type"><code class="literal">JSON</code></a>
                value in an easy-to-read format; each JSON object member
                or array value is printed on a separate line, and a
                child object or array is intended 2 spaces with respect
                to its parent.
              </p><p>
                This function also works with a string that can be
                parsed as a JSON value.
              </p><p>
                See also <a class="xref" href="functions.html#json-utility-functions" title="12.17.6 JSON Utility Functions">Section 12.17.6, “JSON Utility Functions”</a>.
              </p></li><li class="listitem"><p>
                The JSON utility function
                <a class="link" href="functions.html#function_json-storage-size"><code class="literal">JSON_STORAGE_SIZE()</code></a>,
                which returns the storage space in bytes used for the
                binary representation of a JSON document prior to any
                partial update (see previous item).
              </p><p>
                This function also accepts a valid string representation
                of a JSON document. For such a value,
                <code class="literal">JSON_STORAGE_SIZE()</code> returns the space
                used by its binary representation following its
                conversion to a JSON document. For a variable containing
                the string representation of a JSON document,
                <code class="literal">JSON_STORAGE_FREE()</code> returns zero.
                Either function produces an error if its (non-null)
                argument cannot be parsed as a valid JSON document, and
                <code class="literal">NULL</code> if the argument is
                <code class="literal">NULL</code>.
              </p><p>
                For more information and examples, see
                <a class="xref" href="functions.html#json-utility-functions" title="12.17.6 JSON Utility Functions">Section 12.17.6, “JSON Utility Functions”</a>.
              </p></li><li class="listitem"><p>
                A JSON merge function intended to conform to
                <a class="ulink" href="https://tools.ietf.org/html/rfc7396" target="_top">RFC
                7396</a>.
                <a class="link" href="functions.html#function_json-merge-patch"><code class="literal">JSON_MERGE_PATCH()</code></a>, when
                used on 2 JSON objects, merges them into a single JSON
                object that has as members a union of the following
                sets:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    Each member of the first object for which there is
                    no member with the same key in the second object.
                  </p></li><li class="listitem"><p>
                    Each member of the second object for which there is
                    no member having the same key in the first object,
                    and whose value is not the JSON
                    <code class="literal">null</code> literal.
                  </p></li><li class="listitem"><p>
                    Each member having a key that exists in both
                    objects, and whose value in the second object is not
                    the JSON <code class="literal">null</code> literal.
</p></li></ul>
</div>
<p>
                As part of this work, the
                <a class="link" href="functions.html#function_json-merge"><code class="literal">JSON_MERGE()</code></a> function has
                been renamed
                <a class="link" href="functions.html#function_json-merge-preserve"><code class="literal">JSON_MERGE_PRESERVE()</code></a>.
                <code class="literal">JSON_MERGE()</code> continues to be
                recognized as an alias for
                <code class="literal">JSON_MERGE_PRESERVE()</code> in MySQL
                5.7, but is now deprecated and is subject
                to removal in a future version of MySQL.
              </p><p>
                For more information and examples, see
                <a class="xref" href="functions.html#json-modification-functions" title="12.17.4 Functions That Modify JSON Values">Section 12.17.4, “Functions That Modify JSON Values”</a>.
</p></li></ul>
</div>
<p>
            See <a class="xref" href="functions.html#json-search-functions" title="12.17.3 Functions That Search JSON Values">Section 12.17.3, “Functions That Search JSON Values”</a>, for more
            information about <code class="literal">-&gt;</code> and
            <code class="literal">JSON_EXTRACT()</code>. For information about
            JSON path support in MySQL 5.7, see
            <a class="xref" href="data-types.html#json-paths" title="Searching and Modifying JSON Values">Searching and Modifying JSON Values</a>. See also
            <a class="xref" href="sql-statements.html#json-column-indirect-index" title="Indexing a Generated Column to Provide a JSON Column Index">Indexing a Generated Column to Provide a JSON Column Index</a>.
          </p></li><li class="listitem"><p><b>System and status variables. </b>
              System and status variable information is now available in
              Performance Schema tables, in preference to use of
              <code class="literal">INFORMATION_SCHEMA</code> tables to obtain
              these variable. This also affects the operation of the
              <a class="link" href="sql-statements.html#show-variables" title="13.7.5.39 SHOW VARIABLES Statement"><code class="literal">SHOW VARIABLES</code></a> and
              <a class="link" href="sql-statements.html#show-status" title="13.7.5.35 SHOW STATUS Statement"><code class="literal">SHOW STATUS</code></a> statements. The
              value of the
              <a class="link" href="server-administration.html#sysvar_show_compatibility_56"><code class="literal">show_compatibility_56</code></a>
              system variable affects the output produced from and
              privileges required for system and status variable
              statements and tables. For details, see the description of
              that variable in
              <a class="xref" href="server-administration.html#server-system-variables" title="5.1.7 Server System Variables">Section 5.1.7, “Server System Variables”</a>.
</p><a class="indexterm" name="idm46734430646992"></a><a class="indexterm" name="idm46734430645600"></a><a class="indexterm" name="idm46734430644208"></a><a class="indexterm" name="idm46734430642816"></a>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">

<div class="admon-title">
Note
</div>
<p>
              The default for
              <a class="link" href="server-administration.html#sysvar_show_compatibility_56"><code class="literal">show_compatibility_56</code></a> is
              <code class="literal">OFF</code>. Applications that require 5.6
              behavior should set this variable to <code class="literal">ON</code>
              until such time as they have been migrated to the new
              behavior for system variables and status variables. See
              <a class="xref" href="performance-schema.html#performance-schema-variable-table-migration" title="25.20 Migrating to Performance Schema System and Status Variable Tables">Section 25.20, “Migrating to Performance Schema System and Status Variable Tables”</a>
</p>
</div>
</li><li class="listitem"><p><b>sys schema. </b>
              MySQL distributions now include the
              <a class="link" href="sys-schema.html" title="Chapter 26 MySQL sys Schema"><code class="literal">sys</code></a> schema, which is a set
              of objects that help DBAs and developers interpret data
              collected by the Performance Schema.
              <a class="link" href="sys-schema.html" title="Chapter 26 MySQL sys Schema"><code class="literal">sys</code></a> schema objects can be
              used for typical tuning and diagnosis use cases. For more
              information, see <a class="xref" href="sys-schema.html" title="Chapter 26 MySQL sys Schema">Chapter 26, <i>MySQL sys Schema</i></a>.
            </p><a class="indexterm" name="idm46734430633232"></a><a class="indexterm" name="idm46734430631840"></a></li><li class="listitem"><p><b>Condition handling. </b>
              MySQL now supports stacked diagnostics areas. When the
              diagnostics area stack is pushed, the first (current)
              diagnostics area becomes the second (stacked) diagnostics
              area and a new current diagnostics area is created as a
              copy of it. Within a condition handler, executed
              statements modify the new current diagnostics area, but
              <a class="link" href="sql-statements.html#get-diagnostics" title="13.6.7.3 GET DIAGNOSTICS Statement"><code class="literal">GET
              STACKED DIAGNOSTICS</code></a> can be used to inspect the
              stacked diagnostics area to obtain information about the
              condition that caused the handler to activate, independent
              of current conditions within the handler itself.
              (Previously, there was a single diagnostics area. To
              inspect handler-activating conditions within a handler, it
              was necessary to check this diagnostics area before
              executing any statements that could change it.) See
              <a class="xref" href="sql-statements.html#get-diagnostics" title="13.6.7.3 GET DIAGNOSTICS Statement">Section 13.6.7.3, “GET DIAGNOSTICS Statement”</a>, and
              <a class="xref" href="sql-statements.html#diagnostics-area" title="13.6.7.7 The MySQL Diagnostics Area">Section 13.6.7.7, “The MySQL Diagnostics Area”</a>.
            </p><a class="indexterm" name="idm46734436922544"></a><a class="indexterm" name="idm46734436921056"></a></li><li class="listitem"><p><b>Optimizer. </b>
              These optimizer enhancements were added:
</p><a class="indexterm" name="idm46734436917920"></a><a class="indexterm" name="idm46734436916432"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                <a class="link" href="sql-statements.html#explain" title="13.8.2 EXPLAIN Statement"><code class="literal">EXPLAIN</code></a> can be used to
                obtain the execution plan for an explainable statement
                executing in a named connection:
              </p><pre data-lang="sql" class="programlisting">EXPLAIN [<em class="replaceable"><code>options</code></em>] FOR CONNECTION <em class="replaceable"><code>connection_id</code></em>;
</pre><p>
                For more information, see
                <a class="xref" href="optimization.html#explain-for-connection" title="8.8.4 Obtaining Execution Plan Information for a Named Connection">Section 8.8.4, “Obtaining Execution Plan Information for a Named Connection”</a>.
              </p></li><li class="listitem"><p>
                It is possible to provide hints to the optimizer within
                individual SQL statements, which enables finer control
                over statement execution plans than can be achieved
                using the
                <a class="link" href="server-administration.html#sysvar_optimizer_switch"><code class="literal">optimizer_switch</code></a> system
                variable. Hints are also permitted in statements used
                with <a class="link" href="sql-statements.html#explain" title="13.8.2 EXPLAIN Statement"><code class="literal">EXPLAIN</code></a>, enabling
                you to see how hints affect execution plans. For more
                information, see <a class="xref" href="optimization.html#optimizer-hints" title="8.9.3 Optimizer Hints">Section 8.9.3, “Optimizer Hints”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>Triggers. </b>
              Previously, a table could have at most one trigger for
              each combination of trigger event
              (<a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a>,
              <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a>,
              <a class="link" href="sql-statements.html#delete" title="13.2.2 DELETE Statement"><code class="literal">DELETE</code></a>) and action time
              (<code class="literal">BEFORE</code>, <code class="literal">AFTER</code>).
              This limitation has been lifted and multiple triggers are
              permitted. For more information, see
              <a class="xref" href="stored-objects.html#triggers" title="23.3 Using Triggers">Section 23.3, “Using Triggers”</a>.
            </p><a class="indexterm" name="idm46734430595536"></a><a class="indexterm" name="idm46734430594144"></a></li><li class="listitem"><p><b>Logging. </b>
              These logging enhancements were added:
</p><a class="indexterm" name="idm46734430591136"></a><a class="indexterm" name="idm46734430589744"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Previously, on Unix and Unix-like systems, MySQL support
                for sending the server error log to
                <code class="literal">syslog</code> was implemented by having
                <a class="link" href="programs.html#mysqld-safe" title="4.3.2 mysqld_safe — MySQL Server Startup Script"><span class="command"><strong>mysqld_safe</strong></span></a> capture server error
                output and pass it to <code class="literal">syslog</code>. The
                server now includes native <code class="literal">syslog</code>
                support, which has been extended to include Windows. For
                more information about sending server error output to
                <code class="literal">syslog</code>, see
                <a class="xref" href="server-administration.html#error-log" title="5.4.2 The Error Log">Section 5.4.2, “The Error Log”</a>.
              </p></li><li class="listitem"><p>
                The <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> client now has a
                <a class="link" href="programs.html#option_mysql_syslog"><code class="option">--syslog</code></a> option that
                causes interactive statements to be sent to the system
                <code class="literal">syslog</code> facility. Logging is
                suppressed for statements that match the default
                <span class="quote">“<span class="quote">ignore</span>”</span> pattern list
                (<code class="literal">"*IDENTIFIED*:*PASSWORD*"</code>), as well
                as statements that match any patterns specified using
                the <a class="link" href="programs.html#option_mysql_histignore"><code class="option">--histignore</code></a> option.
                See <a class="xref" href="programs.html#mysql-logging" title="4.5.1.3 mysql Client Logging">Section 4.5.1.3, “mysql Client Logging”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>Generated Columns. </b>
              MySQL now supports the specification of generated columns
              in <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE TABLE</code></a> and
              <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a> statements.
              Values of a generated column are computed from an
              expression specified at column creation time. Generated
              columns can be virtual (computed <span class="quote">“<span class="quote">on the fly</span>”</span>
              when rows are read) or stored (computed when rows are
              inserted or updated). For more information, see
              <a class="xref" href="sql-statements.html#create-table-generated-columns" title="13.1.18.7 CREATE TABLE and Generated Columns">Section 13.1.18.7, “CREATE TABLE and Generated Columns”</a>.
            </p><a class="indexterm" name="idm46734430572192"></a><a class="indexterm" name="idm46734430570800"></a></li><li class="listitem"><p><b>mysql client. </b>
              Previously, <span class="keycap"><strong>Control+C</strong></span> in mysql
              interrupted the current statement if there was one, or
              exited mysql if not. Now <span class="keycap"><strong>Control+C</strong></span>
              interrupts the current statement if there was one, or
              cancels any partial input line otherwise, but does not
              exit.
            </p><a class="indexterm" name="idm46734430566304"></a><a class="indexterm" name="idm46734430564912"></a></li><li class="listitem"><p><b>Database name rewriting with mysqlbinlog. </b>
              Renaming of databases by <a class="link" href="programs.html#mysqlbinlog" title="4.6.7 mysqlbinlog — Utility for Processing Binary Log Files"><span class="command"><strong>mysqlbinlog</strong></span></a>
              when reading from binary logs written using the row-based
              format is now supported using the
              <a class="link" href="programs.html#option_mysqlbinlog_rewrite-db"><code class="option">--rewrite-db</code></a> option
              added in MySQL 5.7.1.
            </p><a class="indexterm" name="idm46734430560016"></a><a class="indexterm" name="idm46734430558624"></a><p>
            This option uses the format
            <code class="option">--rewrite-db='<em class="replaceable"><code>dboldname</code></em>-&gt;<em class="replaceable"><code>dbnewname</code></em>'</code>.
            You can implement multiple rewrite rules, by specifying the
            option multiple times.
          </p></li><li class="listitem"><p><b>HANDLER with partitioned tables. </b>
              The <a class="link" href="sql-statements.html#handler" title="13.2.4 HANDLER Statement"><code class="literal">HANDLER</code></a> statement may
              now be used with user-partitioned tables. Such tables may
              use any of the available partitioning types (see
              <a class="xref" href="partitioning.html#partitioning-types" title="22.2 Partitioning Types">Section 22.2, “Partitioning Types”</a>).
            </p><a class="indexterm" name="idm46734430552368"></a><a class="indexterm" name="idm46734430550976"></a></li><li class="listitem"><p><b>Index condition pushdown support for partitioned tables. </b>
              Queries on partitioned tables using the
              <a class="link" href="innodb-storage-engine.html" title="Chapter 14 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> or
              <a class="link" href="storage-engines.html#myisam-storage-engine" title="15.2 The MyISAM Storage Engine"><code class="literal">MyISAM</code></a> storage engine may
              employ the index condition pushdown optimization that was
              introduced in MySQL 5.6. See
              <a class="xref" href="optimization.html#index-condition-pushdown-optimization" title="8.2.1.5 Index Condition Pushdown Optimization">Section 8.2.1.5, “Index Condition Pushdown Optimization”</a>,
              for more information.
            </p><a class="indexterm" name="idm46734430545328"></a><a class="indexterm" name="idm46734430543936"></a></li><li class="listitem"><p><b>WITHOUT VALIDATION support for ALTER TABLE ... EXCHANGE PARTITION. </b>
              As of MySQL 5.7.5,
              <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE
              ... EXCHANGE PARTITION</code></a> syntax includes an
              optional <code class="literal">{WITH|WITHOUT} VALIDATION</code>
              clause. When <code class="literal">WITHOUT VALIDATION</code> is
              specified,
              <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE
              ... EXCHANGE PARTITION</code></a> does not perform
              row-by-row validation when exchanging a populated table
              with the partition, permitting database administrators to
              assume responsibility for ensuring that rows are within
              the boundaries of the partition definition. <code class="literal">WITH
              VALIDATION</code> is the default behavior and need not
              be specified explicitly. For more information, see
              <a class="xref" href="partitioning.html#partitioning-management-exchange" title="22.3.3 Exchanging Partitions and Subpartitions with Tables">Section 22.3.3, “Exchanging Partitions and Subpartitions with Tables”</a>.
            </p><a class="indexterm" name="idm46734430536144"></a><a class="indexterm" name="idm46734430534752"></a></li><li class="listitem"><p><b>Master dump thread improvements. </b>
              The master dump thread was refactored to reduce lock
              contention and improve master throughput. Previous to
              MySQL 5.7.2, the dump thread took a lock on the binary log
              whenever reading an event; in MySQL 5.7.2 and later, this
              lock is held only while reading the position at the end of
              the last successfully written event. This means both that
              multiple dump threads are now able to read concurrently
              from the binary log file, and that dump threads are now
              able to read while clients are writing to the binary log.
            </p><a class="indexterm" name="idm46734430531824"></a><a class="indexterm" name="idm46734430530432"></a></li><li class="listitem"><p><b>Character set support. </b>
              MySQL 5.7.4 includes a <code class="literal">gb18030</code>
              character set that supports the China National Standard
              GB18030 character set. For more information about MySQL
              character set support, see <a class="xref" href="charset.html" title="Chapter 10 Character Sets, Collations, Unicode">Chapter 10, <i>Character Sets, Collations, Unicode</i></a>.
            </p><a class="indexterm" name="idm46734430526192"></a><a class="indexterm" name="idm46734430524800"></a></li><li class="listitem"><p><b>Changing the replication master without STOP SLAVE. </b>
              In MySQL 5.7.4 and later, the strict requirement to
              execute <a class="link" href="sql-statements.html#stop-slave" title="13.4.2.7 STOP SLAVE Statement"><code class="literal">STOP SLAVE</code></a> prior to
              issuing any <a class="link" href="sql-statements.html#change-master-to" title="13.4.2.1 CHANGE MASTER TO Statement"><code class="literal">CHANGE MASTER
              TO</code></a> statement is removed. Instead of depending on
              whether the slave is stopped, the behavior of
              <code class="literal">CHANGE MASTER TO</code> now depends on the
              states of the slave SQL thread and slave I/O threads;
              which of these threads is stopped or running now
              determines the options that can or cannot be used with a
              <code class="literal">CHANGE MASTER TO</code> statement at a given
              point in time. The rules for making this determination are
              listed here:
</p><a class="indexterm" name="idm46734430517984"></a><a class="indexterm" name="idm46734430516592"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                If the SQL thread is stopped, you can execute
                <code class="literal">CHANGE MASTER TO</code> using any
                combination of <code class="literal">RELAY_LOG_FILE</code>,
                <code class="literal">RELAY_LOG_POS</code>, and
                <code class="literal">MASTER_DELAY</code> options, even if the
                slave I/O thread is running. No other options may be
                used with this statement when the I/O thread is running.
              </p></li><li class="listitem"><p>
                If the I/O thread is stopped, you can execute
                <code class="literal">CHANGE MASTER TO</code> using any of the
                options for this statement (in any allowed combination)
                <span class="emphasis"><em>except</em></span>
                <code class="literal">RELAY_LOG_FILE</code>,
                <code class="literal">RELAY_LOG_POS</code>, or
                <code class="literal">MASTER_DELAY</code>, even when the SQL
                thread is running. These three options may not be used
                when the I/O thread is running.
              </p></li><li class="listitem"><p>
                Both the SQL thread and the I/O thread must be stopped
                before issuing <code class="literal">CHANGE MASTER TO ...
                MASTER_AUTO_POSITION = 1</code>.
</p></li></ul>
</div>
<p>
            You can check the current state of the slave SQL and I/O
            threads using <a class="link" href="sql-statements.html#show-slave-status" title="13.7.5.34 SHOW SLAVE STATUS Statement"><code class="literal">SHOW SLAVE
            STATUS</code></a>.
          </p><p>
            If you are using statement-based replication and temporary
            tables, it is possible for a <code class="literal">CHANGE MASTER
            TO</code> statement following a <code class="literal">STOP
            SLAVE</code> statement to leave behind temporary tables
            on the slave. As part of this set of improvements, a warning
            is now issued whenever <code class="literal">CHANGE MASTER TO</code>
            is issued following <code class="literal">STOP SLAVE</code> when
            statement-based replication is in use and
            <a class="link" href="server-administration.html#statvar_Slave_open_temp_tables"><code class="literal">Slave_open_temp_tables</code></a>
            remains greater than 0.
          </p><p>
            For more information, see
            <a class="xref" href="sql-statements.html#change-master-to" title="13.4.2.1 CHANGE MASTER TO Statement">Section 13.4.2.1, “CHANGE MASTER TO Statement”</a>, and
            <a class="xref" href="replication.html#replication-solutions-switch" title="16.3.7 Switching Masters During Failover">Section 16.3.7, “Switching Masters During Failover”</a>.
          </p></li><li class="listitem"><p><b>Test suite. </b>
              The MySQL test suite now uses <code class="literal">InnoDB</code> as
              the default storage engine.
            </p><a class="indexterm" name="idm46734430496256"></a><a class="indexterm" name="idm46734430494864"></a></li><li class="listitem"><p><b>Multi-source replication is now possible. </b>
              MySQL Multi-Source Replication adds the ability to
              replicate from multiple masters to a slave. MySQL
              Multi-Source Replication topologies can be used to back up
              multiple servers to a single server, to merge table
              shards, and consolidate data from multiple servers to a
              single server. See
              <a class="xref" href="replication.html#replication-multi-source" title="16.1.4 MySQL Multi-Source Replication">Section 16.1.4, “MySQL Multi-Source Replication”</a>.
            </p><a class="indexterm" name="idm46734430491440"></a><a class="indexterm" name="idm46734430490048"></a><p>
            As part of MySQL Multi-Source Replication, replication
            channels have been added. Replication channels enable a
            slave to open multiple connections to replicate from, with
            each channel being a connection to a master. See
            <a class="xref" href="replication.html#replication-channels" title="16.2.3 Replication Channels">Section 16.2.3, “Replication Channels”</a>.
          </p></li><li class="listitem"><p><b>Group Replication Performance Schema tables. </b>
              MySQL 5.7 adds a number of new tables to the Performance
              Schema to provide information about replication groups and
              channels. These include the following tables:
</p><a class="indexterm" name="idm46734430485696"></a><a class="indexterm" name="idm46734430484304"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-applier-configuration-table" title="25.12.11.3 The replication_applier_configuration Table"><code class="literal">replication_applier_configuration</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-applier-status-table" title="25.12.11.4 The replication_applier_status Table"><code class="literal">replication_applier_status</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-applier-status-by-coordinator-table" title="25.12.11.5 The replication_applier_status_by_coordinator Table"><code class="literal">replication_applier_status_by_coordinator</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-applier-status-by-worker-table" title="25.12.11.6 The replication_applier_status_by_worker Table"><code class="literal">replication_applier_status_by_worker</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-connection-configuration-table" title="25.12.11.1 The replication_connection_configuration Table"><code class="literal">replication_connection_configuration</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-connection-status-table" title="25.12.11.2 The replication_connection_status Table"><code class="literal">replication_connection_status</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-group-members-table" title="25.12.11.7 The replication_group_members Table"><code class="literal">replication_group_members</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="performance-schema.html#replication-group-member-stats-table" title="25.12.11.8 The replication_group_member_stats Table"><code class="literal">replication_group_member_stats</code></a>
</p></li></ul>
</div>
<p>
            All of these tables were added in MySQL 5.7.2, except for
            <code class="literal">replication_group_members</code> and
            <code class="literal">replication_group_member_stats</code>, which
            were added in MySQL 5.7.6. For more information, see
            <a class="xref" href="performance-schema.html#performance-schema-replication-tables" title="25.12.11 Performance Schema Replication Tables">Section 25.12.11, “Performance Schema Replication Tables”</a>.
          </p></li><li class="listitem"><p><b>Group Replication SQL. </b>
              The following statements were added in MySQL 5.7.6 for
              controlling Group Replication:
</p><a class="indexterm" name="idm46734430464448"></a><a class="indexterm" name="idm46734430463056"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                <a class="link" href="sql-statements.html#start-group-replication" title="13.4.3.1 START GROUP_REPLICATION Statement"><code class="literal">START GROUP_REPLICATION</code></a>
              </p></li><li class="listitem"><p>
                <a class="link" href="sql-statements.html#stop-group-replication" title="13.4.3.2 STOP GROUP_REPLICATION Statement"><code class="literal">STOP GROUP_REPLICATION</code></a>
</p></li></ul>
</div>
<p>
            For more information, see
            <a class="xref" href="sql-statements.html#replication-statements-group" title="13.4.3 SQL Statements for Controlling Group Replication">Section 13.4.3, “SQL Statements for Controlling Group Replication”</a>.
</p></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="mysql-nutshell-deprecations"></a>Features Deprecated in MySQL 5.7</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734430455616"></a><a class="indexterm" name="idm46734430454608"></a><p>
        The following features are deprecated in MySQL 5.7
        and may be or will be removed in a future series. Where
        alternatives are shown, applications should be updated to use
        them.
      </p><p>
        For applications that use features deprecated in MySQL
        5.7 that have been removed in a higher MySQL
        series, statements may fail when replicated from a MySQL
        5.7 master to a higher-series slave, or may have
        different effects on master and slave. To avoid such problems,
        applications that use features deprecated in 5.7
        should be revised to avoid them and use alternatives when
        possible.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            The
            <a class="link" href="server-administration.html#sqlmode_error_for_division_by_zero"><code class="literal">ERROR_FOR_DIVISION_BY_ZERO</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_zero_date"><code class="literal">NO_ZERO_DATE</code></a>, and
            <a class="link" href="server-administration.html#sqlmode_no_zero_in_date"><code class="literal">NO_ZERO_IN_DATE</code></a> SQL modes
            are now deprecated but enabled by default. The long term
            plan is to have them included in strict SQL mode and to
            remove them as explicit modes in a future MySQL release.
          </p><p>
            The deprecated
            <a class="link" href="server-administration.html#sqlmode_error_for_division_by_zero"><code class="literal">ERROR_FOR_DIVISION_BY_ZERO</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_zero_date"><code class="literal">NO_ZERO_DATE</code></a>, and
            <a class="link" href="server-administration.html#sqlmode_no_zero_in_date"><code class="literal">NO_ZERO_IN_DATE</code></a> SQL modes
            are still recognized so that statements that name them do
            not produce an error, but will be removed in a future
            version of MySQL. To make advance preparation for versions
            of MySQL in which these mode names do not exist,
            applications should be modified to not refer to them. See
            <a class="xref" href="server-administration.html#sql-mode-changes" title="SQL Mode Changes in MySQL 5.7">SQL Mode Changes in MySQL 5.7</a>.
          </p><a class="indexterm" name="idm46734430444256"></a><a class="indexterm" name="idm46734430442864"></a><a class="indexterm" name="idm46734430441472"></a><a class="indexterm" name="idm46734430440080"></a><a class="indexterm" name="idm46734430438688"></a><a class="indexterm" name="idm46734430437296"></a><a class="indexterm" name="idm46734430435904"></a><a class="indexterm" name="idm46734430434512"></a></li><li class="listitem"><p>
            These SQL modes are now deprecated and will be removed in a
            future version of MySQL:
            <a class="link" href="server-administration.html#sqlmode_db2"><code class="literal">DB2</code></a>,
            <a class="link" href="server-administration.html#sqlmode_maxdb"><code class="literal">MAXDB</code></a>,
            <a class="link" href="server-administration.html#sqlmode_mssql"><code class="literal">MSSQL</code></a>,
            <a class="link" href="server-administration.html#sqlmode_mysql323"><code class="literal">MYSQL323</code></a>,
            <a class="link" href="server-administration.html#sqlmode_mysql40"><code class="literal">MYSQL40</code></a>,
            <a class="link" href="server-administration.html#sqlmode_oracle"><code class="literal">ORACLE</code></a>,
            <a class="link" href="server-administration.html#sqlmode_postgresql"><code class="literal">POSTGRESQL</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_field_options"><code class="literal">NO_FIELD_OPTIONS</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_key_options"><code class="literal">NO_KEY_OPTIONS</code></a>,
            <a class="link" href="server-administration.html#sqlmode_no_table_options"><code class="literal">NO_TABLE_OPTIONS</code></a>. These
            deprecations have two implications:
</p><a class="indexterm" name="idm46734430422208"></a><a class="indexterm" name="idm46734430420816"></a><a class="indexterm" name="idm46734430419424"></a><a class="indexterm" name="idm46734430418032"></a><a class="indexterm" name="idm46734430416640"></a><a class="indexterm" name="idm46734430415248"></a><a class="indexterm" name="idm46734430413856"></a><a class="indexterm" name="idm46734430412464"></a><a class="indexterm" name="idm46734430411072"></a><a class="indexterm" name="idm46734430409680"></a><a class="indexterm" name="idm46734430408288"></a><a class="indexterm" name="idm46734430406896"></a><a class="indexterm" name="idm46734430405504"></a><a class="indexterm" name="idm46734430404112"></a><a class="indexterm" name="idm46734430402720"></a><a class="indexterm" name="idm46734430401328"></a><a class="indexterm" name="idm46734430399936"></a><a class="indexterm" name="idm46734430398544"></a><a class="indexterm" name="idm46734430397152"></a><a class="indexterm" name="idm46734430395760"></a><a class="indexterm" name="idm46734430394368"></a><a class="indexterm" name="idm46734430392976"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Assigning a deprecated mode to the
                <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system
                variable produces a warning.
              </p></li><li class="listitem"><p>
                With the <a class="link" href="server-administration.html#sqlmode_maxdb"><code class="literal">MAXDB</code></a> SQL
                mode enabled, using <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE
                TABLE</code></a> or <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER
                TABLE</code></a> to add a
                <a class="link" href="data-types.html#datetime" title="11.2.2 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">TIMESTAMP</code></a> column to a
                table produces a warning.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            Changes to account-management statements make the following
            features obsolete. They are now deprecated:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Using <a class="link" href="sql-statements.html#grant" title="13.7.1.4 GRANT Statement"><code class="literal">GRANT</code></a> to create
                users. Instead, use <a class="link" href="sql-statements.html#create-user" title="13.7.1.2 CREATE USER Statement"><code class="literal">CREATE
                USER</code></a>. Following this practice makes the
                <a class="link" href="server-administration.html#sqlmode_no_auto_create_user"><code class="literal">NO_AUTO_CREATE_USER</code></a>
                SQL mode immaterial for
                <a class="link" href="sql-statements.html#grant" title="13.7.1.4 GRANT Statement"><code class="literal">GRANT</code></a> statements, so it
                too is deprecated.
              </p><a class="indexterm" name="idm46734430378512"></a><a class="indexterm" name="idm46734430377120"></a></li><li class="listitem"><p>
                Using <a class="link" href="sql-statements.html#grant" title="13.7.1.4 GRANT Statement"><code class="literal">GRANT</code></a> to modify
                account properties other than privilege assignments.
                This includes authentication, SSL, and resource-limit
                properties. Instead, establish such properties at
                account-creation time with <a class="link" href="sql-statements.html#create-user" title="13.7.1.2 CREATE USER Statement"><code class="literal">CREATE
                USER</code></a> or modify them afterward with
                <a class="link" href="sql-statements.html#alter-user" title="13.7.1.1 ALTER USER Statement"><code class="literal">ALTER USER</code></a>.
              </p></li><li class="listitem"><p>
                <code class="literal">IDENTIFIED BY PASSWORD
                '<em class="replaceable"><code>auth_string</code></em>'</code>
                syntax for <a class="link" href="sql-statements.html#create-user" title="13.7.1.2 CREATE USER Statement"><code class="literal">CREATE USER</code></a>
                and <a class="link" href="sql-statements.html#grant" title="13.7.1.4 GRANT Statement"><code class="literal">GRANT</code></a>. Instead, use
                <code class="literal">IDENTIFIED WITH
                <em class="replaceable"><code>auth_plugin</code></em> AS
                '<em class="replaceable"><code>auth_string</code></em>'</code> for
                <a class="link" href="sql-statements.html#create-user" title="13.7.1.2 CREATE USER Statement"><code class="literal">CREATE USER</code></a> and
                <a class="link" href="sql-statements.html#alter-user" title="13.7.1.1 ALTER USER Statement"><code class="literal">ALTER USER</code></a>, where the
                <code class="literal">'<em class="replaceable"><code>auth_string</code></em>'</code>
                value is in a format compatible with the named plugin.
              </p><a class="indexterm" name="idm46734430363472"></a><a class="indexterm" name="idm46734430362080"></a></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_password"><code class="literal">PASSWORD()</code></a> function
                is deprecated and should be avoided in any context.
                Thus, <a class="link" href="sql-statements.html#set-password" title="13.7.1.7 SET PASSWORD Statement"><code class="literal">SET
                PASSWORD ... =
                PASSWORD('<em class="replaceable"><code>auth_string</code></em>')</code></a>
                syntax is also deprecated.
                <a class="link" href="sql-statements.html#set-password" title="13.7.1.7 SET PASSWORD Statement"><code class="literal">SET
                PASSWORD ... =
                '<em class="replaceable"><code>auth_string</code></em>'</code></a>
                syntax is not deprecated; nevertheless,
                <a class="link" href="sql-statements.html#alter-user" title="13.7.1.1 ALTER USER Statement"><code class="literal">ALTER USER</code></a> is now the
                preferred statement for assigning passwords.
              </p><a class="indexterm" name="idm46734430354720"></a><a class="indexterm" name="idm46734430353328"></a></li><li class="listitem"><p>
                The <a class="link" href="server-administration.html#sysvar_old_passwords"><code class="literal">old_passwords</code></a>
                system variable. Account authentication plugins can no
                longer be left unspecified in the
                <code class="literal">mysql.user</code> system table, so any
                statement that assigns a password from a cleartext
                string can unambiguously determine the hashing method to
                use on the string before storing it in the
                <code class="literal">mysql.user</code> table. This renders
                <a class="link" href="server-administration.html#sysvar_old_passwords"><code class="literal">old_passwords</code></a>
                superflous.
</p><a class="indexterm" name="idm46734430347520"></a><a class="indexterm" name="idm46734430346128"></a></li></ul>
</div>
</li><li class="listitem"><p>
            The query cache is deprecated. Deprecation includes these
            items:
</p><a class="indexterm" name="idm46734430343600"></a><a class="indexterm" name="idm46734430342208"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="sql-statements.html#flush-query-cache"><code class="literal">FLUSH QUERY CACHE</code></a> and
                <a class="link" href="sql-statements.html#reset" title="13.7.6.6 RESET Statement"><code class="literal">RESET QUERY
                CACHE</code></a> statements.
              </p><a class="indexterm" name="idm46734430337936"></a><a class="indexterm" name="idm46734430336544"></a><a class="indexterm" name="idm46734430335152"></a><a class="indexterm" name="idm46734430333760"></a></li><li class="listitem"><p>
                The <code class="literal">SQL_CACHE</code> and
                <code class="literal">SQL_NO_CACHE</code>
                <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> modifiers.
              </p><a class="indexterm" name="idm46734430329360"></a><a class="indexterm" name="idm46734430327968"></a><a class="indexterm" name="idm46734430326576"></a><a class="indexterm" name="idm46734430325184"></a></li><li class="listitem"><p>
                These system variables:
                <a class="link" href="server-administration.html#sysvar_have_query_cache"><code class="literal">have_query_cache</code></a>,
                <a class="link" href="mysql-cluster.html#sysvar_ndb_cache_check_time"><code class="literal">ndb_cache_check_time</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_limit"><code class="literal">query_cache_limit</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_min_res_unit"><code class="literal">query_cache_min_res_unit</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_size"><code class="literal">query_cache_size</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_type"><code class="literal">query_cache_type</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_wlock_invalidate"><code class="literal">query_cache_wlock_invalidate</code></a>.
              </p><a class="indexterm" name="idm46734430316000"></a><a class="indexterm" name="idm46734430314608"></a><a class="indexterm" name="idm46734430313216"></a><a class="indexterm" name="idm46734430311824"></a><a class="indexterm" name="idm46734430310432"></a><a class="indexterm" name="idm46734430309040"></a><a class="indexterm" name="idm46734430307648"></a><a class="indexterm" name="idm46734430306256"></a><a class="indexterm" name="idm46734430304864"></a><a class="indexterm" name="idm46734430303472"></a><a class="indexterm" name="idm46734430302080"></a><a class="indexterm" name="idm46734430300688"></a><a class="indexterm" name="idm46734430299296"></a><a class="indexterm" name="idm46734430297904"></a></li><li class="listitem"><p>
                These status variables:
                <a class="link" href="server-administration.html#statvar_Qcache_free_blocks"><code class="literal">Qcache_free_blocks</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_free_memory"><code class="literal">Qcache_free_memory</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_hits"><code class="literal">Qcache_hits</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_inserts"><code class="literal">Qcache_inserts</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_lowmem_prunes"><code class="literal">Qcache_lowmem_prunes</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_not_cached"><code class="literal">Qcache_not_cached</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_queries_in_cache"><code class="literal">Qcache_queries_in_cache</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_total_blocks"><code class="literal">Qcache_total_blocks</code></a>.
</p><a class="indexterm" name="idm46734430287728"></a><a class="indexterm" name="idm46734430286336"></a><a class="indexterm" name="idm46734430284944"></a><a class="indexterm" name="idm46734430283552"></a><a class="indexterm" name="idm46734430282160"></a><a class="indexterm" name="idm46734430280768"></a><a class="indexterm" name="idm46734430279376"></a><a class="indexterm" name="idm46734430277984"></a><a class="indexterm" name="idm46734430276592"></a><a class="indexterm" name="idm46734430275200"></a><a class="indexterm" name="idm46734430273808"></a><a class="indexterm" name="idm46734430272416"></a><a class="indexterm" name="idm46734430271024"></a><a class="indexterm" name="idm46734430269632"></a><a class="indexterm" name="idm46734430268240"></a><a class="indexterm" name="idm46734430266848"></a></li></ul>
</div>
</li><li class="listitem"><p>
            Previously, the
            <a class="link" href="server-administration.html#option_mysqld_transaction-isolation"><code class="option">--transaction-isolation</code></a> and
            <a class="link" href="server-administration.html#option_mysqld_transaction-read-only"><code class="option">--transaction-read-only</code></a>
            server startup options corresponded to the
            <a class="link" href="server-administration.html#sysvar_tx_isolation"><code class="literal">tx_isolation</code></a> and
            <a class="link" href="server-administration.html#sysvar_tx_read_only"><code class="literal">tx_read_only</code></a> system
            variables. For better name correspondence between startup
            option and system variable names,
            <a class="link" href="server-administration.html#sysvar_transaction_isolation"><code class="literal">transaction_isolation</code></a> and
            <a class="link" href="server-administration.html#sysvar_transaction_read_only"><code class="literal">transaction_read_only</code></a> have
            been created as aliases for
            <a class="link" href="server-administration.html#sysvar_tx_isolation"><code class="literal">tx_isolation</code></a> and
            <a class="link" href="server-administration.html#sysvar_tx_read_only"><code class="literal">tx_read_only</code></a>. The
            <a class="link" href="server-administration.html#sysvar_tx_isolation"><code class="literal">tx_isolation</code></a> and
            <a class="link" href="server-administration.html#sysvar_tx_read_only"><code class="literal">tx_read_only</code></a> variables are
            now deprecated and will be removed in MySQL 8.0.
            Applications should be adjusted to use
            <a class="link" href="server-administration.html#sysvar_transaction_isolation"><code class="literal">transaction_isolation</code></a> and
            <a class="link" href="server-administration.html#sysvar_transaction_read_only"><code class="literal">transaction_read_only</code></a>
            instead.
          </p><a class="indexterm" name="idm46734430252528"></a><a class="indexterm" name="idm46734430251136"></a><a class="indexterm" name="idm46734430249744"></a><a class="indexterm" name="idm46734430248352"></a></li><li class="listitem"><p>
            The
            <a class="link" href="innodb-storage-engine.html#option_mysqld_innodb"><code class="option">--skip-innodb</code></a>
            option and its synonyms (<code class="option">--innodb=OFF</code>,
            <code class="option">--disable-innodb</code>, and so forth) are
            deprecated. These options have no effect as of MySQL 5.7.
            because <code class="literal">InnoDB</code> cannot be disabled.
          </p><a class="indexterm" name="idm46734430243920"></a><a class="indexterm" name="idm46734430242528"></a></li><li class="listitem"><p>
            The client-side <a class="link" href="programs.html#option_general_ssl"><code class="option">--ssl</code></a> and
            <a class="link" href="programs.html#option_general_ssl-verify-server-cert"><code class="option">--ssl-verify-server-cert</code></a>
            options are deprecated. Use
            <a class="link" href="programs.html#option_general_ssl-mode"><code class="option">--ssl-mode=REQUIRED</code></a> instead
            of <a class="link" href="programs.html#option_general_ssl"><code class="option">--ssl=1</code></a> or
            <a class="link" href="programs.html#option_general_ssl"><code class="option">--enable-ssl</code></a>.
            Use <a class="link" href="programs.html#option_general_ssl-mode"><code class="option">--ssl-mode=DISABLED</code></a>
            instead of <a class="link" href="programs.html#option_general_ssl"><code class="option">--ssl=0</code></a>,
            <a class="link" href="programs.html#option_general_ssl"><code class="option">--skip-ssl</code></a>,
            or
            <a class="link" href="programs.html#option_general_ssl"><code class="option">--disable-ssl</code></a>.
            Use
            <a class="link" href="programs.html#option_general_ssl-mode"><code class="option">--ssl-mode=VERIFY_IDENTITY</code></a>
            instead of
            <a class="link" href="programs.html#option_general_ssl-verify-server-cert"><code class="option">--ssl-verify-server-cert</code></a>
            options. (The server-side
            <a class="link" href="server-administration.html#option_mysqld_ssl"><code class="option">--ssl</code></a> option is
            <span class="emphasis"><em>not</em></span> deprecated.)
          </p><a class="indexterm" name="idm46734430230960"></a><a class="indexterm" name="idm46734430229568"></a><a class="indexterm" name="idm46734430228176"></a><a class="indexterm" name="idm46734430226784"></a><p>
            For the C API, <code class="literal">MYSQL_OPT_SSL_ENFORCE</code> and
            <code class="literal">MYSQL_OPT_SSL_VERIFY_SERVER_CERT</code> options
            for <a class="link" href="connectors-apis.html#mysql-options" title="27.7.6.50 mysql_options()"><code class="literal">mysql_options()</code></a>
            correspond to the client-side
            <a class="link" href="programs.html#option_general_ssl"><code class="option">--ssl</code></a> and
            <a class="link" href="programs.html#option_general_ssl-verify-server-cert"><code class="option">--ssl-verify-server-cert</code></a>
            options and are deprecated. Use
            <code class="literal">MYSQL_OPT_SSL_MODE</code> with an option value
            of <code class="literal">SSL_MODE_REQUIRED</code> or
            <code class="literal">SSL_MODE_VERIFY_IDENTITY</code> instead.
          </p><a class="indexterm" name="idm46734430219312"></a><a class="indexterm" name="idm46734430217920"></a><a class="indexterm" name="idm46734430216528"></a><a class="indexterm" name="idm46734430215136"></a></li><li class="listitem"><p>
            The <a class="link" href="server-administration.html#sysvar_log_warnings"><code class="literal">log_warnings</code></a> system
            variable and <a class="link" href="server-administration.html#option_mysqld_log-warnings"><code class="option">--log-warnings</code></a>
            server option are deprecated. Use the
            <a class="link" href="server-administration.html#sysvar_log_error_verbosity"><code class="literal">log_error_verbosity</code></a> system
            variable instead.
          </p><a class="indexterm" name="idm46734430210160"></a><a class="indexterm" name="idm46734430208768"></a><a class="indexterm" name="idm46734430207376"></a><a class="indexterm" name="idm46734430205984"></a></li><li class="listitem"><p>
            The <a class="link" href="server-administration.html#option_mysqld_temp-pool"><code class="option">--temp-pool</code></a> server option
            is deprecated.
          </p><a class="indexterm" name="idm46734430203072"></a><a class="indexterm" name="idm46734430201680"></a></li><li class="listitem"><p>
            The
            <a class="link" href="replication.html#sysvar_binlog_max_flush_queue_time"><code class="literal">binlog_max_flush_queue_time</code></a>
            system variable does nothing in MySQL 5.7, and is deprecated
            as of MySQL 5.7.9.
          </p><a class="indexterm" name="idm46734430198400"></a><a class="indexterm" name="idm46734430197008"></a></li><li class="listitem"><p>
            The <a class="link" href="innodb-storage-engine.html#sysvar_innodb_support_xa"><code class="literal">innodb_support_xa</code></a>
            system variable, which enables <code class="literal">InnoDB</code>
            support for two-phase commit in XA transactions, is
            deprecated as of MySQL 5.7.10. <code class="literal">InnoDB</code>
            support for two-phase commit in XA transactions is always
            enabled as of MySQL 5.7.10.
          </p><a class="indexterm" name="idm46734430192336"></a><a class="indexterm" name="idm46734430190944"></a></li><li class="listitem"><p>
            The
            <a class="link" href="server-administration.html#sysvar_metadata_locks_cache_size"><code class="literal">metadata_locks_cache_size</code></a>
            and
            <a class="link" href="server-administration.html#sysvar_metadata_locks_hash_instances"><code class="literal">metadata_locks_hash_instances</code></a>
            system variables are deprecated. These do nothing as of
            MySQL 5.7.4.
          </p><a class="indexterm" name="idm46734430186672"></a><a class="indexterm" name="idm46734430185280"></a><a class="indexterm" name="idm46734430183888"></a><a class="indexterm" name="idm46734430182496"></a></li><li class="listitem"><p>
            The <a class="link" href="server-administration.html#sysvar_sync_frm"><code class="literal">sync_frm</code></a> system
            variable is deprecated.
          </p><a class="indexterm" name="idm46734430179344"></a><a class="indexterm" name="idm46734430177952"></a></li><li class="listitem"><p>
            The global
            <a class="link" href="server-administration.html#sysvar_character_set_database"><code class="literal">character_set_database</code></a> and
            <a class="link" href="server-administration.html#sysvar_collation_database"><code class="literal">collation_database</code></a> system
            variables are deprecated and will be removed in a future
            version of MySQL.
          </p><a class="indexterm" name="idm46734430173680"></a><a class="indexterm" name="idm46734430172288"></a><a class="indexterm" name="idm46734430170896"></a><a class="indexterm" name="idm46734430169504"></a><p>
            Assigning a value to the session
            <a class="link" href="server-administration.html#sysvar_character_set_database"><code class="literal">character_set_database</code></a> and
            <a class="link" href="server-administration.html#sysvar_collation_database"><code class="literal">collation_database</code></a> system
            variables is deprecated and assignments produce a warning.
            The session variables will become read only in a future
            version of MySQL and assignments will produce an error. It
            will remain possible to access the session variables to
            determine the database character set and collation for the
            default database.
          </p></li><li class="listitem"><p>
            The global scope for the
            <a class="link" href="replication.html#sysvar_sql_log_bin"><code class="literal">sql_log_bin</code></a> system variable
            has been deprecated, and this variable can now be set with
            session scope only. The statement
            <a class="link" href="sql-statements.html#set-variable" title="13.7.4.1 SET Syntax for Variable Assignment"><code class="literal">SET GLOBAL
            SQL_LOG_BIN</code></a> now produces an error. It remains
            possible to read the global value of
            <code class="literal">sql_log_bin</code>, but doing so produces a
            warning. You should act now to remove from your applications
            any dependencies on reading this value; the global scope
            <code class="literal">sql_log_bin</code> is removed in MySQL
            8.0.
          </p><a class="indexterm" name="idm46734430161200"></a><a class="indexterm" name="idm46734430159808"></a></li><li class="listitem"><p>
            With the introduction of the data dictionary in MySQL
            8.0, the
            <a class="link" href="server-administration.html#option_mysqld_ignore-db-dir"><code class="option">--ignore-db-dir</code></a> option and
            <a class="link" href="server-administration.html#sysvar_ignore_db_dirs"><code class="literal">ignore_db_dirs</code></a> system
            variable became superfluous and were removed in that
            version. Consequently, they are deprecated in MySQL
            5.7.
          </p><a class="indexterm" name="idm46734430155616"></a><a class="indexterm" name="idm46734430154224"></a><a class="indexterm" name="idm46734430152832"></a><a class="indexterm" name="idm46734430151440"></a></li><li class="listitem"><p>
            <code class="literal">GROUP BY</code> implicitly sorts by default
            (that is, in the absence of <code class="literal">ASC</code> or
            <code class="literal">DESC</code> designators), but relying on
            implicit <code class="literal">GROUP BY</code> sorting in MySQL
            5.7 is deprecated. To achieve a specific sort
            order of grouped results, it is preferable to use To produce
            a given sort order, use explicit <code class="literal">ASC</code> or
            <code class="literal">DESC</code> designators for <code class="literal">GROUP
            BY</code> columns or provide an <code class="literal">ORDER
            BY</code> clause. <code class="literal">GROUP BY</code> sorting is
            a MySQL extension that may change in a future release; for
            example, to make it possible for the optimizer to order
            groupings in whatever manner it deems most efficient and to
            avoid the sorting overhead.
          </p><a class="indexterm" name="idm46734430143088"></a><a class="indexterm" name="idm46734430141696"></a></li><li class="listitem"><p>
            The <code class="literal">EXTENDED</code> and
            <code class="literal">PARTITIONS</code> keywords for the
            <a class="link" href="sql-statements.html#explain" title="13.8.2 EXPLAIN Statement"><code class="literal">EXPLAIN</code></a> statement are
            deprecated. These keywords are still recognized but are now
            unnecessary because their effect is always enabled.
          </p><a class="indexterm" name="idm46734430137120"></a><a class="indexterm" name="idm46734430135728"></a><a class="indexterm" name="idm46734430134336"></a><a class="indexterm" name="idm46734430132944"></a></li><li class="listitem"><p>
            The <a class="link" href="functions.html#function_encrypt"><code class="literal">ENCRYPT()</code></a>,
            <a class="link" href="functions.html#function_encode"><code class="literal">ENCODE()</code></a>,
            <a class="link" href="functions.html#function_decode"><code class="literal">DECODE()</code></a>,
            <a class="link" href="functions.html#function_des-encrypt"><code class="literal">DES_ENCRYPT()</code></a>, and
            <a class="link" href="functions.html#function_des-decrypt"><code class="literal">DES_DECRYPT()</code></a> encryption
            functions are deprecated. For
            <a class="link" href="functions.html#function_encrypt"><code class="literal">ENCRYPT()</code></a>, consider using
            <a class="link" href="functions.html#function_sha2"><code class="literal">SHA2()</code></a> instead for one-way
            hashing. For the others, consider using
            <a class="link" href="functions.html#function_aes-encrypt"><code class="literal">AES_ENCRYPT()</code></a> and
            <a class="link" href="functions.html#function_aes-decrypt"><code class="literal">AES_DECRYPT()</code></a> instead. The
            <a class="link" href="server-administration.html#option_mysqld_des-key-file"><code class="option">--des-key-file</code></a> option, the
            <a class="link" href="server-administration.html#sysvar_have_crypt"><code class="literal">have_crypt</code></a> system variable,
            the <code class="literal">DES_KEY_FILE</code> option for the
            <a class="link" href="sql-statements.html#flush" title="13.7.6.3 FLUSH Statement"><code class="literal">FLUSH</code></a> statement, and the
            <code class="option">HAVE_CRYPT</code> <span class="command"><strong>CMake</strong></span> option
            also are deprecated.
          </p><a class="indexterm" name="idm46734430117312"></a><a class="indexterm" name="idm46734430115920"></a><a class="indexterm" name="idm46734430114528"></a><a class="indexterm" name="idm46734430113136"></a><a class="indexterm" name="idm46734430111744"></a><a class="indexterm" name="idm46734430110352"></a><a class="indexterm" name="idm46734430108960"></a><a class="indexterm" name="idm46734430107568"></a><a class="indexterm" name="idm46734430106176"></a><a class="indexterm" name="idm46734430104784"></a><a class="indexterm" name="idm46734430103392"></a><a class="indexterm" name="idm46734430101904"></a><a class="indexterm" name="idm46734430100416"></a><a class="indexterm" name="idm46734430098928"></a><a class="indexterm" name="idm46734430097440"></a><a class="indexterm" name="idm46734430095952"></a><a class="indexterm" name="idm46734430094464"></a><a class="indexterm" name="idm46734430092976"></a></li><li class="listitem"><p>
            The <a class="link" href="functions.html#function_mbrequal"><code class="literal">MBREqual()</code></a> spatial
            function is deprecated. Use
            <a class="link" href="functions.html#function_mbrequals"><code class="literal">MBREquals()</code></a> instead.
          </p><a class="indexterm" name="idm46734430088000"></a><a class="indexterm" name="idm46734430086512"></a></li><li class="listitem"><p>
            The functions described in
            <a class="xref" href="functions.html#gis-wkb-functions" title="12.16.4 Functions That Create Geometry Values from WKB Values">Section 12.16.4, “Functions That Create Geometry Values from WKB Values”</a> previously accepted
            either WKB strings or geometry arguments. Use of geometry
            arguments is deprecated. See that section for guidelines for
            migrating queries away from using geometry arguments.
          </p><a class="indexterm" name="idm46734430083216"></a><a class="indexterm" name="idm46734430081760"></a></li><li class="listitem"><p>
            The <code class="literal">INFORMATION_SCHEMA</code>
            <a class="link" href="information-schema.html#profiling-table" title="24.19 The INFORMATION_SCHEMA PROFILING Table"><code class="literal">PROFILING</code></a> table is deprecated.
            Use the Performance Schema instead; see
            <a class="xref" href="performance-schema.html" title="Chapter 25 MySQL Performance Schema">Chapter 25, <i>MySQL Performance Schema</i></a>.
          </p><a class="indexterm" name="idm46734430076592"></a><a class="indexterm" name="idm46734430075104"></a></li><li class="listitem"><p>
            The <code class="literal">INFORMATION_SCHEMA</code>
            <a class="link" href="information-schema.html#innodb-locks-table" title="24.32.13 The INFORMATION_SCHEMA INNODB_LOCKS Table"><code class="literal">INNODB_LOCKS</code></a> and
            <a class="link" href="information-schema.html#innodb-lock-waits-table" title="24.32.14 The INFORMATION_SCHEMA INNODB_LOCK_WAITS Table"><code class="literal">INNODB_LOCK_WAITS</code></a> tables are
            deprecated, to be removed in MySQL 8.0, which provides
            replacement Performance Schema tables.
          </p><a class="indexterm" name="idm46734430069344"></a><a class="indexterm" name="idm46734430067856"></a><a class="indexterm" name="idm46734430066368"></a><a class="indexterm" name="idm46734430064880"></a></li><li class="listitem"><p>
            The Performance Schema
            <a class="link" href="performance-schema.html#setup-timers-table" title="25.12.2.5 The setup_timers Table"><code class="literal">setup_timers</code></a> table is
            deprecated and is removed in MySQL 8.0, as is the
            <code class="literal">TICK</code> row in the
            <a class="link" href="performance-schema.html#performance-timers-table" title="25.12.16.2 The performance_timers Table"><code class="literal">performance_timers</code></a> table.
          </p><a class="indexterm" name="idm46734430059024"></a><a class="indexterm" name="idm46734430057536"></a><a class="indexterm" name="idm46734430056048"></a><a class="indexterm" name="idm46734430054560"></a></li><li class="listitem"><p>
            The <code class="literal">sys</code> schema
            <a class="link" href="sys-schema.html#sys-version" title="26.4.3.47 The version View"><code class="literal">sys.version</code></a> view is deprecated
            and will be removed in a future MySQL version. Affected
            applications should be adjusted to use an alternative
            instead. For example, use the
            <a class="link" href="functions.html#function_version"><code class="literal">VERSION()</code></a> function to
            retrieve the MySQL server version.
          </p><a class="indexterm" name="idm46734430048576"></a><a class="indexterm" name="idm46734430047088"></a></li><li class="listitem"><p>
            Treatment of <code class="literal">\N</code> as a synonym for
            <code class="literal">NULL</code> in SQL statements is deprecated and
            is removed in MySQL 8.0; use
            <code class="literal">NULL</code> instead.
          </p><p>
            This change does not affect text file import or export
            operations performed with <a class="link" href="sql-statements.html#load-data" title="13.2.6 LOAD DATA Statement"><code class="literal">LOAD
            DATA</code></a> or
            <a class="link" href="sql-statements.html#select-into" title="13.2.9.1 SELECT ... INTO Statement"><code class="literal">SELECT ... INTO
            OUTFILE</code></a>, for which <code class="literal">NULL</code>
            continues to be represented by <code class="literal">\N</code>. See
            <a class="xref" href="sql-statements.html#load-data" title="13.2.6 LOAD DATA Statement">Section 13.2.6, “LOAD DATA Statement”</a>.
          </p><a class="indexterm" name="idm46734430037216"></a><a class="indexterm" name="idm46734430035728"></a></li><li class="listitem"><p>
            <code class="literal">PROCEDURE ANALYSE()</code> syntax is deprecated.
          </p><a class="indexterm" name="idm46734430032736"></a><a class="indexterm" name="idm46734430031248"></a></li><li class="listitem"><p>
            Comment stripping by the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> client and
            the options to control it
            (<a class="link" href="programs.html#option_mysql_comments"><code class="option">--skip-comments</code></a>,
            <a class="link" href="programs.html#option_mysql_comments"><code class="option">--comments</code></a>) are deprecated.
          </p><a class="indexterm" name="idm46734430025600"></a><a class="indexterm" name="idm46734430024112"></a><a class="indexterm" name="idm46734430022624"></a><a class="indexterm" name="idm46734430021136"></a><a class="indexterm" name="idm46734430019648"></a><a class="indexterm" name="idm46734430018160"></a></li><li class="listitem"><p>
            <a class="link" href="programs.html#mysqld-safe" title="4.3.2 mysqld_safe — MySQL Server Startup Script"><span class="command"><strong>mysqld_safe</strong></span></a> support for
            <code class="literal">syslog</code> output is deprecated. Use the
            native server <code class="literal">syslog</code> support used
            instead. See <a class="xref" href="server-administration.html#error-log" title="5.4.2 The Error Log">Section 5.4.2, “The Error Log”</a>.
          </p><a class="indexterm" name="idm46734430012480"></a><a class="indexterm" name="idm46734430010992"></a></li><li class="listitem"><p>
            Conversion of pre-MySQL 5.1 database names containing
            special characters to 5.1 format with the addition of a
            <code class="literal">#mysql50#</code> prefix is deprecated. Because
            of this, the
            <a class="link" href="programs.html#option_mysqlcheck_fix-db-names"><code class="option">--fix-db-names</code></a> and
            <a class="link" href="programs.html#option_mysqlcheck_fix-table-names"><code class="option">--fix-table-names</code></a> options
            for <a class="link" href="programs.html#mysqlcheck" title="4.5.3 mysqlcheck — A Table Maintenance Program"><span class="command"><strong>mysqlcheck</strong></span></a> and the <code class="literal">UPGRADE
            DATA DIRECTORY NAME</code> clause for the
            <a class="link" href="sql-statements.html#alter-database" title="13.1.1 ALTER DATABASE Statement"><code class="literal">ALTER DATABASE</code></a> statement are
            also deprecated.
          </p><a class="indexterm" name="idm46734430002144"></a><a class="indexterm" name="idm46734430000640"></a><a class="indexterm" name="idm46734429999136"></a><a class="indexterm" name="idm46734429997648"></a><a class="indexterm" name="idm46734429996160"></a><a class="indexterm" name="idm46734429994672"></a><a class="indexterm" name="idm46734429993184"></a><a class="indexterm" name="idm46734429991696"></a><p>
            Upgrades are supported only from one release series to
            another (for example, 5.0 to 5.1, or 5.1 to 5.5), so there
            should be little remaining need for conversion of older 5.0
            database names to current versions of MySQL. As a
            workaround, upgrade a MySQL 5.0 installation to MySQL 5.1
            before upgrading to a more recent release.
          </p></li><li class="listitem"><p>
            <a class="link" href="programs.html#mysql-install-db" title="4.4.2 mysql_install_db — Initialize MySQL Data Directory"><span class="command"><strong>mysql_install_db</strong></span></a> functionality has been
            integrated into the MySQL server, <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>.
            To use this capability to initialize a MySQL installation,
            if you previously invoked
            <a class="link" href="programs.html#mysql-install-db" title="4.4.2 mysql_install_db — Initialize MySQL Data Directory"><span class="command"><strong>mysql_install_db</strong></span></a> manually, invoke
            <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> with the
            <a class="link" href="server-administration.html#option_mysqld_initialize"><code class="option">--initialize</code></a> or
            <a class="link" href="server-administration.html#option_mysqld_initialize-insecure"><code class="option">--initialize-insecure</code></a> option,
            depending on whether you want the server to generate a
            random password for the initial
            <code class="literal">'root'@'localhost'</code> account.
          </p><p>
            <a class="link" href="programs.html#mysql-install-db" title="4.4.2 mysql_install_db — Initialize MySQL Data Directory"><span class="command"><strong>mysql_install_db</strong></span></a> is now deprecated, as is
            the special <a class="link" href="server-administration.html#option_mysqld_bootstrap"><code class="option">--bootstrap</code></a>
            option that <a class="link" href="programs.html#mysql-install-db" title="4.4.2 mysql_install_db — Initialize MySQL Data Directory"><span class="command"><strong>mysql_install_db</strong></span></a> passes to
            <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>.
          </p><a class="indexterm" name="idm46734429975136"></a><a class="indexterm" name="idm46734429973648"></a><a class="indexterm" name="idm46734429972160"></a><a class="indexterm" name="idm46734429970672"></a></li><li class="listitem"><p>
            The <a class="link" href="programs.html#mysql-plugin" title="4.4.3 mysql_plugin — Configure MySQL Server Plugins"><span class="command"><strong>mysql_plugin</strong></span></a> utility is deprecated.
            Alternatives include loading plugins at server startup using
            the <a class="link" href="server-administration.html#option_mysqld_plugin-load"><code class="option">--plugin-load</code></a> or
            <a class="link" href="server-administration.html#option_mysqld_plugin-load-add"><code class="option">--plugin-load-add</code></a> option, or
            at runtime using the <a class="link" href="sql-statements.html#install-plugin" title="13.7.3.3 INSTALL PLUGIN Statement"><code class="literal">INSTALL
            PLUGIN</code></a> statement.
          </p><a class="indexterm" name="idm46734429963152"></a><a class="indexterm" name="idm46734429961664"></a></li><li class="listitem"><p>
            The <a class="link" href="programs.html#resolveip" title="4.8.4 resolveip — Resolve Host name to IP Address or Vice Versa"><span class="command"><strong>resolveip</strong></span></a> utility is deprecated.
            <span class="command"><strong>nslookup</strong></span>, <span class="command"><strong>host</strong></span>, or
            <span class="command"><strong>dig</strong></span> can be used instead.
          </p><a class="indexterm" name="idm46734429955840"></a><a class="indexterm" name="idm46734429954352"></a></li><li class="listitem"><p>
            The <a class="link" href="programs.html#resolve-stack-dump" title="4.7.3 resolve_stack_dump — Resolve Numeric Stack Trace Dump to Symbols"><span class="command"><strong>resolve_stack_dump</strong></span></a> utility is
            deprecated. Stack traces from official MySQL builds are
            always symbolized, so there is no need to use
            <a class="link" href="programs.html#resolve-stack-dump" title="4.7.3 resolve_stack_dump — Resolve Numeric Stack Trace Dump to Symbols"><span class="command"><strong>resolve_stack_dump</strong></span></a>.
          </p><a class="indexterm" name="idm46734429949296"></a><a class="indexterm" name="idm46734429947808"></a></li><li class="listitem"><p>
            The <a class="link" href="connectors-apis.html#mysql-kill" title="27.7.6.39 mysql_kill()"><code class="literal">mysql_kill()</code></a>,
            <a class="link" href="connectors-apis.html#mysql-list-fields" title="27.7.6.43 mysql_list_fields()"><code class="literal">mysql_list_fields()</code></a>,
            <a class="link" href="connectors-apis.html#mysql-list-processes" title="27.7.6.44 mysql_list_processes()"><code class="literal">mysql_list_processes()</code></a>, and
            <a class="link" href="connectors-apis.html#mysql-refresh" title="27.7.6.58 mysql_refresh()"><code class="literal">mysql_refresh()</code></a> C API
            functions are deprecated. The same is true of the
            corresponding <code class="literal">COM_PROCESS_KILL</code>,
            <code class="literal">COM_FIELD_LIST</code>,
            <code class="literal">COM_PROCESS_INFO</code>, and
            <code class="literal">COM_REFRESH</code> client/server protocol
            commands. Instead, use
            <a class="link" href="connectors-apis.html#mysql-query" title="27.7.6.53 mysql_query()"><code class="literal">mysql_query()</code></a> to execute a
            <a class="link" href="sql-statements.html#kill" title="13.7.6.4 KILL Statement"><code class="literal">KILL</code></a>,
            <a class="link" href="sql-statements.html#show-columns" title="13.7.5.5 SHOW COLUMNS Statement"><code class="literal">SHOW COLUMNS</code></a>,
            <a class="link" href="sql-statements.html#show-processlist" title="13.7.5.29 SHOW PROCESSLIST Statement"><code class="literal">SHOW PROCESSLIST</code></a>, or
            <a class="link" href="sql-statements.html#flush" title="13.7.6.3 FLUSH Statement"><code class="literal">FLUSH</code></a> statement,
            respectively.
          </p><a class="indexterm" name="idm46734429930080"></a><a class="indexterm" name="idm46734429928592"></a><a class="indexterm" name="idm46734429927104"></a><a class="indexterm" name="idm46734429925616"></a><a class="indexterm" name="idm46734429924128"></a><a class="indexterm" name="idm46734429922640"></a><a class="indexterm" name="idm46734429921152"></a><a class="indexterm" name="idm46734429919664"></a><a class="indexterm" name="idm46734429918176"></a><a class="indexterm" name="idm46734429916688"></a><a class="indexterm" name="idm46734429915200"></a><a class="indexterm" name="idm46734429913712"></a><a class="indexterm" name="idm46734429912224"></a><a class="indexterm" name="idm46734429910736"></a><a class="indexterm" name="idm46734429909248"></a><a class="indexterm" name="idm46734429907760"></a></li><li class="listitem"><p>
            The <code class="literal">mysql_shutdown()</code> C API function is
            deprecated. Instead, use
            <a class="link" href="connectors-apis.html#mysql-query" title="27.7.6.53 mysql_query()"><code class="literal">mysql_query()</code></a> to execute a
            <a class="link" href="sql-statements.html#shutdown" title="13.7.6.7 SHUTDOWN Statement"><code class="literal">SHUTDOWN</code></a> statement.
          </p><a class="indexterm" name="idm46734429902048"></a><a class="indexterm" name="idm46734429900560"></a></li><li class="listitem"><p>
            The <code class="literal">libmysqld</code> embedded server library is
            deprecated as of MySQL 5.7.19. These are also deprecated:
</p><a class="indexterm" name="idm46734429897456"></a><a class="indexterm" name="idm46734429895968"></a><a class="indexterm" name="idm46734429894480"></a><a class="indexterm" name="idm46734429892992"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="programs.html#mysql-config" title="4.7.1 mysql_config — Display Options for Compiling Clients"><span class="command"><strong>mysql_config</strong></span></a>
                <a class="link" href="programs.html#option_mysql_config_libmysqld-libs"><code class="option">--libmysqld-libs</code></a>,
                <a class="link" href="programs.html#option_mysql_config_libmysqld-libs"><code class="option">--embedded-libs</code></a>,
                and
                <a class="link" href="programs.html#option_mysql_config_libmysqld-libs"><code class="option">--embedded</code></a>
                options
              </p></li><li class="listitem"><p>
                The <span class="command"><strong>CMake</strong></span>
                <a class="link" href="installing.html#option_cmake_with_embedded_server"><code class="option">WITH_EMBEDDED_SERVER</code></a>,
                <a class="link" href="installing.html#option_cmake_with_embedded_shared_library"><code class="option">WITH_EMBEDDED_SHARED_LIBRARY</code></a>,
                and
                <a class="link" href="installing.html#option_cmake_install_secure_file_priv_embeddeddir"><code class="option">INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR</code></a>
                options
              </p></li><li class="listitem"><p>
                The (undocumented) <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a>
                <code class="option">--server-arg</code> option
              </p></li><li class="listitem"><p>
                The <span class="command"><strong>mysqltest</strong></span>
                <code class="option">--embedded-server</code>,
                <code class="option">--server-arg</code>, and
                <code class="option">--server-file</code> options
              </p></li><li class="listitem"><p>
                The <span class="command"><strong>mysqltest_embedded</strong></span> and
                <span class="command"><strong>mysql_client_test_embedded</strong></span> test
                programs
</p></li></ul>
</div>
<p>
            Because <code class="literal">libmysqld</code> uses an API comparable
            to that of <code class="literal">libmysqlclient</code>, the migration
            path away from <code class="literal">libmysqld</code> is
            straightforward:
</p>
<div class="orderedlist">
<ol class="orderedlist" type="1"><li class="listitem"><p>
                Bring up a standalone MySQL server
                (<a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>).
              </p></li><li class="listitem"><p>
                Modify application code to remove API calls that are
                specific to <code class="literal">libmysqld</code>.
              </p></li><li class="listitem"><p>
                Modify application code to connect to the standalone
                MySQL server.
              </p></li><li class="listitem"><p>
                Modify build scripts to use
                <code class="literal">libmysqlclient</code> rather than
                <code class="literal">libmysqld</code>. For example, if you use
                <a class="link" href="programs.html#mysql-config" title="4.7.1 mysql_config — Display Options for Compiling Clients"><span class="command"><strong>mysql_config</strong></span></a>, invoke it with the
                <a class="link" href="programs.html#option_mysql_config_libs"><code class="option">--libs</code></a> option
                rather than
                <a class="link" href="programs.html#option_mysql_config_libmysqld-libs"><code class="option">--libmysqld-libs</code></a>.
</p></li></ol>
</div>
</li><li class="listitem"><p>
            The <a class="link" href="programs.html#replace-utility" title="4.8.3 replace — A String-Replacement Utility"><span class="command"><strong>replace</strong></span></a> utility is deprecated.
          </p><a class="indexterm" name="idm46734429857136"></a><a class="indexterm" name="idm46734429855648"></a></li><li class="listitem"><p>
            Support for DTrace is deprecated.
          </p><a class="indexterm" name="idm46734429853312"></a><a class="indexterm" name="idm46734429851824"></a></li><li class="listitem"><p>
            The <a class="link" href="functions.html#function_json-merge"><code class="literal">JSON_MERGE()</code></a> function is
            deprecated as of MySQL 5.7.22. Use
            <a class="link" href="functions.html#function_json-merge-preserve"><code class="literal">JSON_MERGE_PRESERVE()</code></a>
            instead.
          </p><a class="indexterm" name="idm46734429846960"></a><a class="indexterm" name="idm46734429845472"></a></li><li class="listitem"><p>
            Support for placing table partitions in shared
            <code class="literal">InnoDB</code> tablespaces is deprecated as of
            MySQL 5.7.24. Shared tablespaces include the
            <code class="literal">InnoDB</code> system tablespace and general
            tablespaces. For information about identifying partitions in
            shared tablespaces and moving them to file-per-table
            tablespaces, see
            <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html" target="_top">Preparing Your Installation for Upgrade</a>.
          </p><a class="indexterm" name="idm46734429840624"></a><a class="indexterm" name="idm46734429839120"></a></li><li class="listitem"><p>
            Support for <code class="literal">TABLESPACE =
            innodb_file_per_table</code> and <code class="literal">TABLESPACE =
            innodb_temporary</code> clauses with
            <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE
            TEMPORARY TABLE</code></a> is deprecated as of MySQL 5.7.24.
          </p><a class="indexterm" name="idm46734429834000"></a><a class="indexterm" name="idm46734429832512"></a></li><li class="listitem"><p>
            The <code class="option">--ndb</code> <a class="link" href="programs.html#perror" title="4.8.2 perror — Display MySQL Error Message Information"><span class="command"><strong>perror</strong></span></a> option
            is deprecated. Use the <a class="link" href="mysql-cluster.html#mysql-cluster-programs-ndb-perror" title="21.4.17 ndb_perror — Obtain NDB Error Message Information"><span class="command"><strong>ndb_perror</strong></span></a> utility
            instead.
</p><a class="indexterm" name="idm46734429826896"></a><a class="indexterm" name="idm46734429825408"></a></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="mysql-nutshell-removals"></a>Features Removed in MySQL 5.7</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734429822496"></a><a class="indexterm" name="idm46734429821456"></a><p>
        The following items are obsolete and have been removed in MySQL
        5.7. Where alternatives are shown, applications
        should be updated to use them.
      </p><p>
        For MySQL 5.6 applications that use features
        removed in MySQL 5.7, statements may fail when
        replicated from a MySQL 5.6 master to a MySQL
        5.7 slave, or may have different effects on master
        and slave. To avoid such problems, applications that use
        features removed in MySQL 5.7 should be revised to
        avoid them and use alternatives when possible.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Support for passwords that use the older pre-4.1 password
            hashing format is removed, which involves the following
            changes. Applications that use any feature no longer
            supported must be modified.
</p><a class="indexterm" name="idm46734429817840"></a><a class="indexterm" name="idm46734429816352"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <code class="literal">mysql_old_password</code> authentication
                plugin is removed. Accounts that use this plugin are
                disabled at startup and the server writes an
                <span class="quote">“<span class="quote">unknown plugin</span>”</span> message to the error log.
                For instructions on upgrading accounts that use this
                plugin, see <a class="xref" href="security.html#account-upgrades" title="6.4.1.3 Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin">Section 6.4.1.3, “Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password
        Plugin”</a>.
              </p><a class="indexterm" name="idm46734429811840"></a><a class="indexterm" name="idm46734429810352"></a></li><li class="listitem"><p>
                The <code class="option">--secure-auth</code> option to the server
                and client programs is the default, but is now a no-op.
                It is deprecated and will be removed in a future MySQL
                release.
              </p><a class="indexterm" name="idm46734429807424"></a><a class="indexterm" name="idm46734429805936"></a></li><li class="listitem"><p>
                The <code class="option">--skip-secure-auth</code> option to the
                server and client programs is no longer supported and
                using it produces an error.
              </p><a class="indexterm" name="idm46734429803072"></a><a class="indexterm" name="idm46734429801584"></a></li><li class="listitem"><p>
                The <a class="link" href="server-administration.html#sysvar_secure_auth"><code class="literal">secure_auth</code></a> system
                variable permits only a value of 1; a value of 0 is no
                longer permitted.
              </p><a class="indexterm" name="idm46734429797776"></a><a class="indexterm" name="idm46734429796288"></a></li><li class="listitem"><p>
                For the <a class="link" href="server-administration.html#sysvar_old_passwords"><code class="literal">old_passwords</code></a>
                system variable, a value of 1 (produce pre-4.1 hashes)
                is no longer permitted.
              </p><a class="indexterm" name="idm46734429792640"></a><a class="indexterm" name="idm46734429791152"></a></li><li class="listitem"><p>
                The <code class="literal">OLD_PASSWORD()</code> function is
                removed.
</p><a class="indexterm" name="idm46734429788112"></a><a class="indexterm" name="idm46734429786624"></a></li></ul>
</div>
</li><li class="listitem"><p>
            In MySQL 5.6.6, the 2-digit
            <a class="link" href="data-types.html#year" title="11.2.4 The YEAR Type"><code class="literal">YEAR(2)</code></a> data type was
            deprecated. Support for
            <a class="link" href="data-types.html#year" title="11.2.4 The YEAR Type"><code class="literal">YEAR(2)</code></a> is now removed. Once
            you upgrade to MySQL 5.7.5 or higher, any remaining 2-digit
            <a class="link" href="data-types.html#year" title="11.2.4 The YEAR Type"><code class="literal">YEAR(2)</code></a> columns must be
            converted to 4-digit <a class="link" href="data-types.html#year" title="11.2.4 The YEAR Type"><code class="literal">YEAR</code></a>
            columns to become usable again. For conversion strategies,
            see <a class="xref" href="data-types.html#migrating-from-year2" title="11.2.5 2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR">Section 11.2.5, “2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR”</a>. For example, run
            <a class="link" href="programs.html#mysql-upgrade" title="4.4.7 mysql_upgrade — Check and Upgrade MySQL Tables"><span class="command"><strong>mysql_upgrade</strong></span></a> after upgrading.
          </p><a class="indexterm" name="idm46734429776752"></a><a class="indexterm" name="idm46734429775264"></a></li><li class="listitem"><p>
            The <code class="literal">innodb_mirrored_log_groups</code> system
            variable. The only supported value was 1, so it had no
            purpose.
          </p><a class="indexterm" name="idm46734429772144"></a><a class="indexterm" name="idm46734429770640"></a></li><li class="listitem"><p>
            The <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_storage_engine" target="_top"><code class="literal">storage_engine</code></a> system
            variable. Use
            <a class="link" href="server-administration.html#sysvar_default_storage_engine"><code class="literal">default_storage_engine</code></a>
            instead.
          </p><a class="indexterm" name="idm46734429765712"></a><a class="indexterm" name="idm46734429764224"></a></li><li class="listitem"><p>
            The <code class="literal">thread_concurrency</code> system variable.
          </p><a class="indexterm" name="idm46734429761200"></a><a class="indexterm" name="idm46734429759712"></a></li><li class="listitem"><p>
            The <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_timed_mutexes" target="_top"><code class="literal">timed_mutexes</code></a> system
            variable. It does nothing and has no effect.
          </p><a class="indexterm" name="idm46734429756160"></a><a class="indexterm" name="idm46734429754672"></a></li><li class="listitem"><p>
            The <code class="literal">IGNORE</code> clause for
            <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a>.
          </p><a class="indexterm" name="idm46734429750416"></a><a class="indexterm" name="idm46734429748928"></a></li><li class="listitem"><p>
            <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT
            DELAYED</code></a> is no longer supported. The server
            recognizes but ignores the <code class="literal">DELAYED</code>
            keyword, handles the insert as a nondelayed insert, and
            generates an
            <code class="literal">ER_WARN_LEGACY_SYNTAX_CONVERTED</code> warning.
            (<span class="quote">“<span class="quote">INSERT DELAYED is no longer supported. The statement
            was converted to INSERT.</span>”</span>) Similarly,
            <a class="link" href="sql-statements.html#replace" title="13.2.8 REPLACE Statement"><code class="literal">REPLACE
            DELAYED</code></a> is handled as a nondelayed replace. The
            <code class="literal">DELAYED</code> keyword will be removed in a
            future release.
          </p><a class="indexterm" name="idm46734429741216"></a><a class="indexterm" name="idm46734429739728"></a><p>
            In addition, several <code class="literal">DELAYED</code>-related
            options or features were removed:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <code class="literal">--delayed-insert</code> option for
                <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a>.
              </p></li><li class="listitem"><p>
                The <code class="literal">COUNT_WRITE_DELAYED</code>,
                <code class="literal">SUM_TIMER_WRITE_DELAYED</code>,
                <code class="literal">MIN_TIMER_WRITE_DELAYED</code>,
                <code class="literal">AVG_TIMER_WRITE_DELAYED</code>, and
                <code class="literal">MAX_TIMER_WRITE_DELAYED</code> columns of
                the Performance Schema
                <a class="link" href="performance-schema.html#table-lock-waits-summary-by-table-table" title="25.12.15.7.3 The table_lock_waits_summary_by_table Table"><code class="literal">table_lock_waits_summary_by_table</code></a>
                table.
              </p></li><li class="listitem"><p>
                <a class="link" href="programs.html#mysqlbinlog" title="4.6.7 mysqlbinlog — Utility for Processing Binary Log Files"><span class="command"><strong>mysqlbinlog</strong></span></a> no longer writes comments
                mentioning <code class="literal">INSERT DELAYED</code>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            Database symlinking on Windows using for
            <code class="filename">.sym</code> files has been removed because it
            is redundant with native symlink support available using
            <span class="command"><strong>mklink</strong></span>. Any <code class="filename">.sym</code>
            file symbolic links will be ignored and should be replaced
            with symlinks created using <span class="command"><strong>mklink</strong></span>. See
            <a class="xref" href="optimization.html#windows-symbolic-links" title="8.12.3.3 Using Symbolic Links for Databases on Windows">Section 8.12.3.3, “Using Symbolic Links for Databases on Windows”</a>.
          </p><a class="indexterm" name="idm46734429720560"></a><a class="indexterm" name="idm46734429719072"></a></li><li class="listitem"><p>
            The unused <code class="option">--basedir</code>,
            <code class="option">--datadir</code>, and <code class="option">--tmpdir</code>
            options for <a class="link" href="programs.html#mysql-upgrade" title="4.4.7 mysql_upgrade — Check and Upgrade MySQL Tables"><span class="command"><strong>mysql_upgrade</strong></span></a> were removed.
          </p><a class="indexterm" name="idm46734429714160"></a><a class="indexterm" name="idm46734429712672"></a><a class="indexterm" name="idm46734429711184"></a><a class="indexterm" name="idm46734429709696"></a><a class="indexterm" name="idm46734429708208"></a><a class="indexterm" name="idm46734429706720"></a></li><li class="listitem"><p>
            Previously, program options could be specified in full or as
            any unambiguous prefix. For example, the
            <a class="link" href="programs.html#option_mysqldump_compress"><code class="option">--compress</code></a> option could be
            given to <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> as
            <code class="option">--compr</code>, but not as <code class="option">--comp</code>
            because the latter is ambiguous. Option prefixes are no
            longer supported; only full options are accepted. This is
            because prefixes can cause problems when new options are
            implemented for programs and a prefix that is currently
            unambiguous might become ambiguous in the future. Some
            implications of this change:
</p><a class="indexterm" name="idm46734429701072"></a><a class="indexterm" name="idm46734429699584"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <code class="option">--key-buffer</code> option must now be
                specified as <code class="option">--key-buffer-size</code>.
              </p></li><li class="listitem"><p>
                The <code class="option">--skip-grant</code> option must now be
                specified as <code class="option">--skip-grant-tables</code>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            <a class="link" href="sql-statements.html#show-engine" title="13.7.5.15 SHOW ENGINE Statement"><code class="literal">SHOW ENGINE
            INNODB MUTEX</code></a> output is removed. Comparable
            information can be generated by creating views on
            <a class="link" href="performance-schema.html" title="Chapter 25 MySQL Performance Schema">Performance Schema</a>
            tables.
          </p><a class="indexterm" name="idm46734429691120"></a><a class="indexterm" name="idm46734429689616"></a></li><li class="listitem"><p>
            The <code class="literal">InnoDB</code> Tablespace Monitor and
            <code class="literal">InnoDB</code> Table Monitor are removed. For the
            Table Monitor, equivalent information can be obtained from
            <code class="literal">InnoDB</code>
            <code class="literal">INFORMATION_SCHEMA</code> tables.
          </p><a class="indexterm" name="idm46734429684352"></a><a class="indexterm" name="idm46734429682848"></a><a class="indexterm" name="idm46734429681344"></a><a class="indexterm" name="idm46734429679856"></a></li><li class="listitem"><p>
            The specially named tables used to enable and disable the
            standard <code class="literal">InnoDB</code> Monitor and
            <code class="literal">InnoDB</code> Lock Monitor
            (<code class="literal">innodb_monitor</code> and
            <code class="literal">innodb_lock_monitor</code>) are removed and
            replaced by two dynamic system variables:
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_status_output"><code class="literal">innodb_status_output</code></a> and
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_status_output_locks"><code class="literal">innodb_status_output_locks</code></a>.
            For additional information, see
            <a class="xref" href="innodb-storage-engine.html#innodb-monitors" title="14.18 InnoDB Monitors">Section 14.18, “InnoDB Monitors”</a>.
          </p><a class="indexterm" name="idm46734429670816"></a><a class="indexterm" name="idm46734429669328"></a><a class="indexterm" name="idm46734429667840"></a><a class="indexterm" name="idm46734429666352"></a></li><li class="listitem"><p>
            The <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_use_sys_malloc" target="_top"><code class="literal">innodb_use_sys_malloc</code></a>
            and
            <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_additional_mem_pool_size" target="_top"><code class="literal">innodb_additional_mem_pool_size</code></a>
            system variables, which were deprecated in MySQL 5.6.3, were
            removed.
          </p><a class="indexterm" name="idm46734429661536"></a><a class="indexterm" name="idm46734429660048"></a><a class="indexterm" name="idm46734429658560"></a><a class="indexterm" name="idm46734429657056"></a></li><li class="listitem"><p>
            The <span class="command"><strong>msql2mysql</strong></span>,
            <span class="command"><strong>mysql_convert_table_format</strong></span>,
            <span class="command"><strong>mysql_find_rows</strong></span>,
            <span class="command"><strong>mysql_fix_extensions</strong></span>,
            <span class="command"><strong>mysql_setpermission</strong></span>,
            <span class="command"><strong>mysql_waitpid</strong></span>,
            <span class="command"><strong>mysql_zap</strong></span>,
            <span class="command"><strong>mysqlaccess</strong></span>, and
            <span class="command"><strong>mysqlbug</strong></span> utilities.
          </p><a class="indexterm" name="idm46734429648256"></a><a class="indexterm" name="idm46734429646768"></a><a class="indexterm" name="idm46734429645280"></a><a class="indexterm" name="idm46734429643776"></a><a class="indexterm" name="idm46734429642272"></a><a class="indexterm" name="idm46734429640784"></a><a class="indexterm" name="idm46734429639296"></a><a class="indexterm" name="idm46734429637808"></a><a class="indexterm" name="idm46734429636320"></a><a class="indexterm" name="idm46734429634832"></a><a class="indexterm" name="idm46734429633344"></a><a class="indexterm" name="idm46734429631856"></a><a class="indexterm" name="idm46734429630368"></a><a class="indexterm" name="idm46734429628880"></a><a class="indexterm" name="idm46734429627392"></a><a class="indexterm" name="idm46734429625904"></a><a class="indexterm" name="idm46734429624416"></a><a class="indexterm" name="idm46734429622928"></a></li><li class="listitem"><p>
            The <span class="command"><strong>mysqlhotcopy</strong></span> utility. Alternatives
            include <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> and MySQL Enterprise
            Backup.
          </p><a class="indexterm" name="idm46734429618624"></a><a class="indexterm" name="idm46734429617136"></a></li><li class="listitem"><p>
            The <span class="command"><strong>binary-configure.sh</strong></span> script.
          </p><a class="indexterm" name="idm46734429614128"></a><a class="indexterm" name="idm46734429612640"></a></li><li class="listitem"><p>
            The
            <a class="ulink" href="https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html#option_cmake_innodb_page_atomic_ref_count" target="_top"><code class="option">INNODB_PAGE_ATOMIC_REF_COUNT</code></a>
            <span class="command"><strong>CMake</strong></span> option is removed.
          </p><a class="indexterm" name="idm46734429608672"></a><a class="indexterm" name="idm46734429607168"></a></li><li class="listitem"><p>
            The <code class="literal">innodb_create_intrinsic</code> option is
            removed.
          </p><a class="indexterm" name="idm46734429604112"></a><a class="indexterm" name="idm46734429602624"></a></li><li class="listitem"><p>
            The <code class="literal">innodb_optimize_point_storage</code> option
            and related internal data types
            (<code class="literal">DATA_POINT</code> and
            <code class="literal">DATA_VAR_POINT</code>) are removed.
          </p><a class="indexterm" name="idm46734429598096"></a><a class="indexterm" name="idm46734429596592"></a></li><li class="listitem"><p>
            The <code class="literal">innodb_log_checksum_algorithm</code> option
            is removed.
</p><a class="indexterm" name="idm46734429593520"></a><a class="indexterm" name="idm46734429592016"></a></li></ul>
</div>

</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="added-deprecated-removed"></a>1.5 Server and Status Variables and Options Added, Deprecated, or Removed in
MySQL 5.7</h2>
</div>
</div>
</div>
<p>
    This section lists server variables, status variables, and options
    that were added for the first time, have been deprecated, or have
    been removed in MySQL 5.7.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        <a class="xref" href="introduction.html#optvars-added" title="Options and Variables Introduced in MySQL 5.7">Options and Variables Introduced in MySQL 5.7</a>
      </p></li><li class="listitem"><p>
        <a class="xref" href="introduction.html#optvars-deprecated" title="Options and Variables Deprecated in MySQL 5.7">Options and Variables Deprecated in MySQL 5.7</a>
      </p></li><li class="listitem"><p>
        <a class="xref" href="introduction.html#optvars-removed" title="Options and Variables Removed in MySQL 5.7">Options and Variables Removed in MySQL 5.7</a>
</p></li></ul>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="optvars-added"></a>Options and Variables Introduced in MySQL 5.7</h3>

</div>

</div>

</div>
<p>
      The following system variables, status variables, and options are
      new in MySQL 5.7, and have not been included in any previous
      release series.
</p>
<div class="itemizedlist">
<a name="optvars-added-list"></a><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_current_size">Audit_log_current_size</a></code>:
          Audit log file current size. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_event_max_drop_size">Audit_log_event_max_drop_size</a></code>:
          Size of largest dropped audited event. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events">Audit_log_events</a></code>:
          Number of handled audited events. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events_filtered">Audit_log_events_filtered</a></code>:
          Number of filtered audited events. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events_lost">Audit_log_events_lost</a></code>:
          Number of dropped audited events. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events_written">Audit_log_events_written</a></code>:
          Number of written audited events. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_total_size">Audit_log_total_size</a></code>:
          Combined size of written audited events. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_write_waits">Audit_log_write_waits</a></code>:
          Number of write-delayed audited events. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_change_repl_filter</a></code>:
          Count of CHANGE REPLICATION FILTER statements. Added in MySQL
          5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_explain_other</a></code>:
          Count of EXPLAIN FOR CONNECTION statements. Added in MySQL
          5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_group_replication_start</a></code>:
          Count of START GROUP_REPLICATION statements. Added in MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_group_replication_stop</a></code>:
          Count of STOP GROUP_REPLICATION statements. Added in MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_show_create_user</a></code>:
          Count of SHOW CREATE USER statements. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">Com_show_slave_status_nonblocking</code>: Count of
          SHOW SLAVE STATUS NONBLOCKING statements. Added in MySQL
          5.7.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_shutdown</a></code>:
          Count of SHUTDOWN statements. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Connection_control_delay_generated">Connection_control_delay_generated</a></code>:
          How many times the server delayed a connection request. Added
          in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Firewall_access_denied">Firewall_access_denied</a></code>:
          Number of statements rejected by MySQL Enterprise Firewall.
          Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Firewall_access_granted">Firewall_access_granted</a></code>:
          Number of statements accepted by MySQL Enterprise Firewall.
          Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Firewall_cached_entries">Firewall_cached_entries</a></code>:
          Number of statements recorded by MySQL Enterprise Firewall.
          Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Innodb_buffer_pool_resize_status">Innodb_buffer_pool_resize_status</a></code>:
          The status of the dynamic buffer pool resizing operation.
          Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Locked_connects">Locked_connects</a></code>:
          Number of attempts to connect to locked accounts. Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Max_execution_time_exceeded">Max_execution_time_exceeded</a></code>:
          Number of statements that exceeded the execution timeout
          value. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Max_execution_time_set">Max_execution_time_set</a></code>:
          Number of statements for which execution timeout was set.
          Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Max_execution_time_set_failed">Max_execution_time_set_failed</a></code>:
          Number of statements for which execution timeout setting
          failed. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal">Max_statement_time_exceeded</code>: Number of
          statements that exceeded the execution timeout value. Added in
          MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal">Max_statement_time_set</code>: Number of
          statements for which execution timeout was set. Added in MySQL
          5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal">Max_statement_time_set_failed</code>: Number of
          statements for which execution timeout setting failed. Added
          in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Max_used_connections_time">Max_used_connections_time</a></code>:
          The time at which Max_used_connections reached its current
          value. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_index_stat_lost">Performance_schema_index_stat_lost</a></code>:
          Number of indexes for which statistics were lost. Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_memory_classes_lost">Performance_schema_memory_classes_lost</a></code>:
          How many memory instruments could not be loaded. Added in
          MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_metadata_lock_lost">Performance_schema_metadata_lock_lost</a></code>:
          Number of metadata locks that could not be recorded. Added in
          MySQL 5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_nested_statement_lost">Performance_schema_nested_statement_lost</a></code>:
          Number of stored program statements for which statistics were
          lost. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_prepared_statements_lost">Performance_schema_prepared_statements_lost</a></code>:
          Number of prepared statements that could not be instrumented.
          Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_program_lost">Performance_schema_program_lost</a></code>:
          Number of stored programs for which statistics were lost.
          Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#statvar_Performance_schema_table_lock_stat_lost">Performance_schema_table_lock_stat_lost</a></code>:
          Number of tables for which lock statistics were lost. Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Rewriter_number_loaded_rules">Rewriter_number_loaded_rules</a></code>:
          Number of rewrite rules successfully loaded into memory. Added
          in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Rewriter_number_reloads">Rewriter_number_reloads</a></code>:
          Number of reloads of rules table into memory. Added in MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Rewriter_number_rewritten_queries">Rewriter_number_rewritten_queries</a></code>:
          Number of queries rewritten since the plugin was loaded. Added
          in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Rewriter_reload_error">Rewriter_reload_error</a></code>:
          Whether an error occurred when last loading the rewriting
          rules into memory. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_audit-log">audit-log</a></code>:
          Whether to activate the audit log plugin. Added in MySQL
          5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_buffer_size">audit_log_buffer_size</a></code>:
          The size of the audit log buffer. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_compression">audit_log_compression</a></code>:
          Audit log file compression method. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_connection_policy">audit_log_connection_policy</a></code>:
          Audit logging policy for connection-related events. Added in
          MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_current_session">audit_log_current_session</a></code>:
          Whether to audit current session. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_encryption">audit_log_encryption</a></code>:
          Audit log file encryption method. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_exclude_accounts">audit_log_exclude_accounts</a></code>:
          Accounts not to audit. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_file">audit_log_file</a></code>:
          The name of the audit log file. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_filter_id">audit_log_filter_id</a></code>:
          ID of current audit log filter. Added in MySQL 5.7.13.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_flush">audit_log_flush</a></code>:
          Close and reopen the audit log file. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_format">audit_log_format</a></code>:
          The audit log file format. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_include_accounts">audit_log_include_accounts</a></code>:
          Accounts to audit. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_policy">audit_log_policy</a></code>:
          Audit logging policy. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_read_buffer_size">audit_log_read_buffer_size</a></code>:
          Audit log file read buffer size. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_rotate_on_size">audit_log_rotate_on_size</a></code>:
          Close and reopen the audit log file at a certain size. Added
          in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_statement_policy">audit_log_statement_policy</a></code>:
          Audit logging policy for statement-related events. Added in
          MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_strategy">audit_log_strategy</a></code>:
          The audit logging strategy. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_auth_method_name">authentication_ldap_sasl_auth_method_name</a></code>:
          Authentication method name. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_bind_base_dn">authentication_ldap_sasl_bind_base_dn</a></code>:
          LDAP server base distinguished name. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_bind_root_dn">authentication_ldap_sasl_bind_root_dn</a></code>:
          LDAP server root distinguished name. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_bind_root_pwd">authentication_ldap_sasl_bind_root_pwd</a></code>:
          LDAP server root bind password. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_ca_path">authentication_ldap_sasl_ca_path</a></code>:
          LDAP server certificate authority file name. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_group_search_attr">authentication_ldap_sasl_group_search_attr</a></code>:
          LDAP server group search attribute. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_group_search_filter">authentication_ldap_sasl_group_search_filter</a></code>:
          LDAP custom group search filter. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_init_pool_size">authentication_ldap_sasl_init_pool_size</a></code>:
          LDAP server initial connection pool size. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_log_status">authentication_ldap_sasl_log_status</a></code>:
          LDAP server log level. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_max_pool_size">authentication_ldap_sasl_max_pool_size</a></code>:
          LDAP server maximum connection pool size. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_server_host">authentication_ldap_sasl_server_host</a></code>:
          LDAP server host name or IP address. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_server_port">authentication_ldap_sasl_server_port</a></code>:
          LDAP server port number. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_tls">authentication_ldap_sasl_tls</a></code>:
          Whether to use encrypted connections to LDAP server. Added in
          MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_user_search_attr">authentication_ldap_sasl_user_search_attr</a></code>:
          LDAP server user search attribute. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_auth_method_name">authentication_ldap_simple_auth_method_name</a></code>:
          Authentication method name. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_bind_base_dn">authentication_ldap_simple_bind_base_dn</a></code>:
          LDAP server base distinguished name. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_bind_root_dn">authentication_ldap_simple_bind_root_dn</a></code>:
          LDAP server root distinguished name. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_bind_root_pwd">authentication_ldap_simple_bind_root_pwd</a></code>:
          LDAP server root bind password. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_ca_path">authentication_ldap_simple_ca_path</a></code>:
          LDAP server certificate authority file name. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_group_search_attr">authentication_ldap_simple_group_search_attr</a></code>:
          LDAP server group search attribute. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_group_search_filter">authentication_ldap_simple_group_search_filter</a></code>:
          LDAP custom group search filter. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_init_pool_size">authentication_ldap_simple_init_pool_size</a></code>:
          LDAP server initial connection pool size. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_log_status">authentication_ldap_simple_log_status</a></code>:
          LDAP server log level. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_max_pool_size">authentication_ldap_simple_max_pool_size</a></code>:
          LDAP server maximum connection pool size. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_server_host">authentication_ldap_simple_server_host</a></code>:
          LDAP server host name or IP address. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_server_port">authentication_ldap_simple_server_port</a></code>:
          LDAP server port number. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_tls">authentication_ldap_simple_tls</a></code>:
          Whether to use encrypted connections to LDAP server. Added in
          MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_user_search_attr">authentication_ldap_simple_user_search_attr</a></code>:
          LDAP server user search attribute. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_authentication_windows_log_level">authentication_windows_log_level</a></code>:
          Windows authentication plugin logging level. Added in MySQL
          5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_authentication_windows_use_principal_name">authentication_windows_use_principal_name</a></code>:
          Whether to use Windows authentication plugin principal name.
          Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_auto_generate_certs">auto_generate_certs</a></code>:
          Whether to autogenerate SSL key and certificate files. Added
          in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_avoid_temporal_upgrade">avoid_temporal_upgrade</a></code>:
          Whether ALTER TABLE should upgrade pre-5.6.4 temporal columns.
          Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_error_action">binlog_error_action</a></code>:
          Controls what happens when the server cannot write to the
          binary log. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_group_commit_sync_delay">binlog_group_commit_sync_delay</a></code>:
          Sets the number of microseconds to wait before synchronizing
          transactions to disk. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_group_commit_sync_no_delay_count">binlog_group_commit_sync_no_delay_count</a></code>:
          Sets the maximum number of transactions to wait for before
          aborting the current delay specified by
          binlog_group_commit_sync_delay. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_gtid_simple_recovery">binlog_gtid_simple_recovery</a></code>:
          Controls how binary logs are iterated during GTID recovery.
          Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_transaction_dependency_history_size">binlog_transaction_dependency_history_size</a></code>:
          Number of row hashes kept for looking up transaction that last
          updated some row. Added in MySQL 5.7.22.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_transaction_dependency_tracking">binlog_transaction_dependency_tracking</a></code>:
          Source of dependency information (commit timestamps or
          transaction write sets) from which to assess which
          transactions can be executed in parallel by slave's
          multithreaded applier. Added in MySQL 5.7.22.
        </p></li><li class="listitem"><p>
          <code class="literal">binlogging_impossible_mode</code>: Deprecated and
          later removed. Use binlog_error_action instead. Added in MySQL
          5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_block_encryption_mode">block_encryption_mode</a></code>:
          Mode for block-based encryption algorithms. Added in MySQL
          5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_check_proxy_users">check_proxy_users</a></code>:
          Whether built-in authentication plugins do proxying. Added in
          MySQL 5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_connection_control_failed_connections_threshold">connection_control_failed_connections_threshold</a></code>:
          Consecutive failed connection attempts before delays occur.
          Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_connection_control_max_connection_delay">connection_control_max_connection_delay</a></code>:
          Maximum delay (milliseconds) for server response to failed
          connection attempts. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_connection_control_min_connection_delay">connection_control_min_connection_delay</a></code>:
          Minimum delay (milliseconds) for server response to failed
          connection attempts. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_daemonize">daemonize</a></code>:
          Run as System V daemon. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_default_authentication_plugin">default_authentication_plugin</a></code>:
          The default authentication plugin. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_default_password_lifetime">default_password_lifetime</a></code>:
          Age in days when passwords effectively expire. Added in MySQL
          5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_disable-partition-engine-check">disable-partition-engine-check</a></code>:
          Whether to disable the startup check for tables with nonnative
          partitioning. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_disabled_storage_engines">disabled_storage_engines</a></code>:
          Storage engines that cannot be used to create tables. Added in
          MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_disconnect_on_expired_password">disconnect_on_expired_password</a></code>:
          Whether server disconnects clients with expired passwords if
          clients cannot handle such accounts. Added in MySQL 5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_early-plugin-load">early-plugin-load</a></code>:
          Specify plugins to load before loading mandatory built-in
          plugins and before storage engine initialization. Added in
          MySQL 5.7.11.
        </p></li><li class="listitem"><p>
          <code class="literal">executed_gtids_compression_period</code>: Renamed
          to gtid_executed_compression_period. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_allow_local_disjoint_gtids_join">group_replication_allow_local_disjoint_gtids_join</a></code>:
          Allow the current server to join the group even if it has
          transactions not present in the group. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_allow_local_lower_version_join">group_replication_allow_local_lower_version_join</a></code>:
          Allow the current server to join the group even if it has a
          lower plugin version than the group. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_auto_increment_increment">group_replication_auto_increment_increment</a></code>:
          Determines the interval between successive column values for
          transactions that execute on this server. Added in MySQL
          5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_bootstrap_group">group_replication_bootstrap_group</a></code>:
          Configure this server to bootstrap the group. Added in MySQL
          5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_components_stop_timeout">group_replication_components_stop_timeout</a></code>:
          Timeout, in seconds, that the plugin waits for each of the
          components when shutting down. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_compression_threshold">group_replication_compression_threshold</a></code>:
          The value in bytes above which (LZ4) compression is enforced;
          when set to zero, deactivates compression. Added in MySQL
          5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_enforce_update_everywhere_checks">group_replication_enforce_update_everywhere_checks</a></code>:
          Enable or disable strict consistency checks for multi-master
          update everywhere. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_exit_state_action">group_replication_exit_state_action</a></code>:
          How the instance behaves when it leaves the group
          involuntarily. Added in MySQL 5.7.24.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_applier_threshold">group_replication_flow_control_applier_threshold</a></code>:
          Number of waiting transactions in the applier queue that
          trigger flow control. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_certifier_threshold">group_replication_flow_control_certifier_threshold</a></code>:
          Specifies the number of waiting transactions in the certifier
          queue that trigger flow control. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_mode">group_replication_flow_control_mode</a></code>:
          Specifies the mode used for flow control. Added in MySQL
          5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_force_members">group_replication_force_members</a></code>:
          A comma separated list of peer addresses, such as
          host1:port1,host2:port2. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_group_name">group_replication_group_name</a></code>:
          The name of the group. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_group_seeds">group_replication_group_seeds</a></code>:
          A list of peer addresses, comma separated list such as
          host1:port1,host2:port2. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_gtid_assignment_block_size">group_replication_gtid_assignment_block_size</a></code>:
          Number of consecutive GTIDs that are reserved for each member;
          each member consumes its blocks and reserves more when needed.
          Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_ip_whitelist">group_replication_ip_whitelist</a></code>:
          The list of hosts permitted to connect to the group. Added in
          MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_local_address">group_replication_local_address</a></code>:
          The local address in host:port formatted string. Added in
          MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_member_weight">group_replication_member_weight</a></code>:
          Chance of this member being elected as primary. Added in MySQL
          5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_poll_spin_loops">group_replication_poll_spin_loops</a></code>:
          Number of times the group communication thread waits. Added in
          MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_complete_at">group_replication_recovery_complete_at</a></code>:
          Recovery policies when handling cached transactions after
          state transfer. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_reconnect_interval">group_replication_recovery_reconnect_interval</a></code>:
          The sleep time, in seconds, between reconnection attempts when
          no donor was found in the group. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_retry_count">group_replication_recovery_retry_count</a></code>:
          Number of times that a joining member tries to connect to the
          available donors before giving up. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_ca">group_replication_recovery_ssl_ca</a></code>:
          File that contains list of trusted SSL Certificate
          Authorities. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_capath">group_replication_recovery_ssl_capath</a></code>:
          Directory that contains trusted SSL Certificate Authority
          certificate files. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_cert">group_replication_recovery_ssl_cert</a></code>:
          Name of SSL certificate file to use for establishing encrypted
          connection. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_cipher">group_replication_recovery_ssl_cipher</a></code>:
          Permissible ciphers for SSL encryption. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_crl">group_replication_recovery_ssl_crl</a></code>:
          File that contains certificate revocation lists. Added in
          MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_crlpath">group_replication_recovery_ssl_crlpath</a></code>:
          Directory that contains certificate revocation-list files.
          Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_key">group_replication_recovery_ssl_key</a></code>:
          Name of SSL key file to use for establishing encrypted
          connection. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_ssl_verify_server_cert">group_replication_recovery_ssl_verify_server_cert</a></code>:
          Make the recovery process check the server's Common Name value
          in the donor sent certificate. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_use_ssl">group_replication_recovery_use_ssl</a></code>:
          Whether Group Replication recovery connection should use SSL.
          Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_single_primary_mode">group_replication_single_primary_mode</a></code>:
          Instructs the group to use a single server for the read/write
          workload. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_ssl_mode">group_replication_ssl_mode</a></code>:
          Desired security state of connection between Group Replication
          members. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_start_on_boot">group_replication_start_on_boot</a></code>:
          Whether the server should start Group Replication or not
          during server start. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_transaction_size_limit">group_replication_transaction_size_limit</a></code>:
          Sets the maximum size of transaction in bytes which the group
          accepts. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_unreachable_majority_timeout">group_replication_unreachable_majority_timeout</a></code>:
          How long to wait for network partitions that result in a
          minority to leave the group. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_gtid_executed_compression_period">gtid_executed_compression_period</a></code>:
          Compress gtid_executed table each time this many transactions
          have occurred. 0 means never compress this table. Applies only
          when binary logging is disabled. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_have_statement_timeout">have_statement_timeout</a></code>:
          Whether statement execution timeout is available. Added in
          MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_initialize">initialize</a></code>:
          Whether to run in initialization mode (secure). Added in MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_initialize-insecure">initialize-insecure</a></code>:
          Whether to run in initialization mode (insecure). Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_adaptive_hash_index_parts">innodb_adaptive_hash_index_parts</a></code>:
          Partitions the adaptive hash index search system into n
          partitions, with each partition protected by a separate latch.
          Each index is bound to a specific partition based on space ID
          and index ID attributes. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_background_drop_list_empty">innodb_background_drop_list_empty</a></code>:
          This debug option delays table creation until the background
          drop list is empty. Added in MySQL 5.7.10.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_chunk_size">innodb_buffer_pool_chunk_size</a></code>:
          Defines the chunk size that is used when resizing the buffer
          pool. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_dump_pct">innodb_buffer_pool_dump_pct</a></code>:
          Specifies the percentage of the most recently used pages for
          each buffer pool to read out and dump. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_compress_debug">innodb_compress_debug</a></code>:
          Compresses all tables using a specified compression algorithm.
          Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_deadlock_detect">innodb_deadlock_detect</a></code>:
          Enables or disables deadlock detection. Added in MySQL 5.7.15.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_default_row_format">innodb_default_row_format</a></code>:
          Defines the default row format (ROW_FORMAT) for InnoDB tables.
          Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_disable_resize_buffer_pool_debug">innodb_disable_resize_buffer_pool_debug</a></code>:
          Disables resizing of the InnoDB buffer pool. Added in MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_fill_factor">innodb_fill_factor</a></code>:
          Defines the percentage B-tree leaf and non-leaf page space
          that is to be filled with data. The remaining space is
          reserved for future growth. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_flush_sync">innodb_flush_sync</a></code>:
          Enable innodb_flush_sync to ignore the innodb_io_capacity
          setting for bursts of I/O activity that occur at checkpoints.
          Disable innodb_flush_sync to adhere to the limit on I/O
          activity defined by the innodb_io_capacity setting. Added in
          MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_ft_result_cache_limit">innodb_ft_result_cache_limit</a></code>:
          The InnoDB FULLTEXT search query result cache limit. Added in
          MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_ft_total_cache_size">innodb_ft_total_cache_size</a></code>:
          The total memory allocated for the InnoDB FULLTEXT search
          index cache. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_checkpoint_now">innodb_log_checkpoint_now</a></code>:
          A debug option that forces InnoDB to write a checkpoint. Added
          in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal">innodb_log_checksum_algorithm</code>: Specifies
          how to generate and verify the checksum stored in each redo
          log disk block. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_checksums">innodb_log_checksums</a></code>:
          Enables or disables checksums for redo log pages. Added in
          MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_write_ahead_size">innodb_log_write_ahead_size</a></code>:
          The write-ahead block size for the redo log. Added in MySQL
          5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_max_undo_log_size">innodb_max_undo_log_size</a></code>:
          Sets the threshold for truncating the InnoDB undo log. Added
          in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_merge_threshold_set_all_debug">innodb_merge_threshold_set_all_debug</a></code>:
          Overrides the current MERGE_THRESHOLD setting with the
          specified value for all indexes that are currently in the
          dictionary cache. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_numa_interleave">innodb_numa_interleave</a></code>:
          Enables the NUMA MPOL_INTERLEAVE memory policy for allocation
          of the InnoDB buffer pool. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal">innodb_optimize_point_storage</code>: Enable this
          option to store POINT data as fixed-length data rather than a
          variable-length data. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_page_cleaners">innodb_page_cleaners</a></code>:
          Number of page cleaner threads. Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_purge_rseg_truncate_frequency">innodb_purge_rseg_truncate_frequency</a></code>:
          The rate at which undo log purge should be invoked as part of
          the purge action. A value of n invokes undo log purge on every
          nth iteration of purge invocation. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_stats_include_delete_marked">innodb_stats_include_delete_marked</a></code>:
          Include delete-marked records when calculating persistent
          InnoDB statistics. Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_status_output">innodb_status_output</a></code>:
          Used to enable or disable periodic output for the standard
          InnoDB Monitor. Also used in combination with
          innodb_status_output_locks to enable and disable periodic
          output for the InnoDB Lock Monitor. Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_status_output_locks">innodb_status_output_locks</a></code>:
          Used to enable or disable periodic output for the standard
          InnoDB Lock Monitor. innodb_status_output must also be enabled
          to produce periodic output for the InnoDB Lock Monitor. Added
          in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_sync_debug">innodb_sync_debug</a></code>:
          Enables InnoDB sync debug checking. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_temp_data_file_path">innodb_temp_data_file_path</a></code>:
          Path to temporary tablespace data files and their sizes. Added
          in MySQL 5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_tmpdir">innodb_tmpdir</a></code>:
          The directory location for the temporary table files created
          during online ALTER TABLE operations. Added in MySQL 5.7.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_log_truncate">innodb_undo_log_truncate</a></code>:
          Enable this option to mark the InnoDB undo tablespace for
          truncation. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_internal_tmp_disk_storage_engine">internal_tmp_disk_storage_engine</a></code>:
          Storage engine for internal temporary tables. Added in MySQL
          5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-destination">keyring-migration-destination</a></code>:
          Key migration destination keyring plugin. Added in MySQL
          5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-host">keyring-migration-host</a></code>:
          Host name for connecting to running server for key migration.
          Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-password">keyring-migration-password</a></code>:
          Password for connecting to running server for key migration.
          Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-port">keyring-migration-port</a></code>:
          TCP/IP port number for connecting to running server for key
          migration. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-socket">keyring-migration-socket</a></code>:
          Unix socket file or Windows named pipe for connecting to
          running server for key migration. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-source">keyring-migration-source</a></code>:
          Key migration source keyring plugin. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-user">keyring-migration-user</a></code>:
          User name for connecting to running server for key migration.
          Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_cmk_id">keyring_aws_cmk_id</a></code>:
          AWS keyring plugin customer master key ID value. Added in
          MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_conf_file">keyring_aws_conf_file</a></code>:
          AWS keyring plugin configuration file location. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_data_file">keyring_aws_data_file</a></code>:
          AWS keyring plugin storage file location. Added in MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_region">keyring_aws_region</a></code>:
          AWS keyring plugin region. Added in MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_encrypted_file_data">keyring_encrypted_file_data</a></code>:
          keyring_encrypted_file plugin data file. Added in MySQL
          5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_encrypted_file_password">keyring_encrypted_file_password</a></code>:
          keyring_encrypted_file plugin password. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_file_data">keyring_file_data</a></code>:
          keyring_file plugin data file. Added in MySQL 5.7.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_okv_conf_dir">keyring_okv_conf_dir</a></code>:
          Oracle Key Vault keyring plugin configuration directory. Added
          in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_operations">keyring_operations</a></code>:
          Whether keyring operations are enabled. Added in MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal">log_backward_compatible_user_definitions</code>:
          Whether to log CREATE/ALTER USER, GRANT in backward-compatible
          fashion. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_log_builtin_as_identified_by_password">log_builtin_as_identified_by_password</a></code>:
          Whether to log CREATE/ALTER USER, GRANT in backward-compatible
          fashion. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_error_verbosity">log_error_verbosity</a></code>:
          Error logging verbosity level. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_slow_admin_statements">log_slow_admin_statements</a></code>:
          Log slow OPTIMIZE, ANALYZE, ALTER and other administrative
          statements to the slow query log if it is open. Added in MySQL
          5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_log_slow_slave_statements">log_slow_slave_statements</a></code>:
          Cause slow statements as executed by the slave to be written
          to the slow query log. Added in MySQL 5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_log_statements_unsafe_for_binlog">log_statements_unsafe_for_binlog</a></code>:
          Disables error 1592 warnings being written to the error log.
          Added in MySQL 5.7.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_syslog">log_syslog</a></code>:
          Whether to write error log to syslog. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_syslog_facility">log_syslog_facility</a></code>:
          Facility for syslog messages. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_syslog_include_pid">log_syslog_include_pid</a></code>:
          Whether to include server PID in syslog messages. Added in
          MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_syslog_tag">log_syslog_tag</a></code>:
          Tag for server identifier in syslog messages. Added in MySQL
          5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_timestamps">log_timestamps</a></code>:
          Log timestamp format. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_max_digest_length">max_digest_length</a></code>:
          The maximum digest size in bytes. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_max_execution_time">max_execution_time</a></code>:
          Statement execution timeout value. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_max_points_in_geometry">max_points_in_geometry</a></code>:
          Maximum number of points in geometry values for
          ST_Buffer_Strategy(). Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal">max_statement_time</code>: Statement execution
          timeout value. Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_mecab_charset">mecab_charset</a></code>:
          The character set currently used by the MeCab full-text parser
          plugin. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_mecab_rc_file">mecab_rc_file</a></code>:
          Path to the mecabrc configuration file for the MeCab parser
          for full-text search. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_mysql_firewall_mode">mysql_firewall_mode</a></code>:
          Whether MySQL Enterprise Firewall is operational. Added in
          MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_mysql_firewall_trace">mysql_firewall_trace</a></code>:
          Whether to enable firewall trace. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_mysql_native_password_proxy_users">mysql_native_password_proxy_users</a></code>:
          Whether the mysql_native_password authentication plugin does
          proxying. Added in MySQL 5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#option_mysqld_mysqlx">mysqlx</a></code>:
          Whether X Plugin is initialized. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_bind_address">mysqlx_bind_address</a></code>:
          The network address X Plugin uses for connections. Added in
          MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_connect_timeout">mysqlx_connect_timeout</a></code>:
          Maximum permitted waiting time in seconds for a connection to
          set up a session. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_idle_worker_thread_timeout">mysqlx_idle_worker_thread_timeout</a></code>:
          Time in seconds after which idle worker threads are
          terminated. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_max_allowed_packet">mysqlx_max_allowed_packet</a></code>:
          Maximum size of network packets that can be received by X
          Plugin. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_max_connections">mysqlx_max_connections</a></code>:
          Maximum number of concurrent client connections X Plugin can
          accept. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_min_worker_threads">mysqlx_min_worker_threads</a></code>:
          Minimum number of worker threads used for handling client
          requests. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_port">mysqlx_port</a></code>:
          Port number on which X Plugin accepts TCP/IP connections.
          Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_port_open_timeout">mysqlx_port_open_timeout</a></code>:
          Time which the X Plugin waits when accepting connections.
          Added in MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_socket">mysqlx_socket</a></code>:
          Path to the socket where X Plugin listens for connections.
          Added in MySQL 5.7.15.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_ca">mysqlx_ssl_ca</a></code>:
          File that contains list of trusted SSL Certificate
          Authorities. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_capath">mysqlx_ssl_capath</a></code>:
          Directory that contains trusted SSL Certificate Authority
          certificate files. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_cert">mysqlx_ssl_cert</a></code>:
          File that contains X.509 certificate. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_cipher">mysqlx_ssl_cipher</a></code>:
          Permissible ciphers for connection encryption. Added in MySQL
          5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_crl">mysqlx_ssl_crl</a></code>:
          File that contains certificate revocation lists. Added in
          MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_crlpath">mysqlx_ssl_crlpath</a></code>:
          Directory that contains certificate revocation list files.
          Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_ssl_key">mysqlx_ssl_key</a></code>:
          File that contains X.509 key. Added in MySQL 5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_named_pipe_full_access_group">named_pipe_full_access_group</a></code>:
          Name of Windows group granted full access to the named pipe.
          Added in MySQL 5.7.25.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_ngram_token_size">ngram_token_size</a></code>:
          Defines the n-gram token size for the full-text search ngram
          parser. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_offline_mode">offline_mode</a></code>:
          Whether server is offline. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_parser_max_mem_size">parser_max_mem_size</a></code>:
          Maximum amount of memory available to parser. Added in MySQL
          5.7.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#option_mysqld_performance-schema-consumer-events-transactions-current">performance-schema-consumer-events-transactions-current</a></code>:
          Configure events-transactions-current consumer. Added in MySQL
          5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#option_mysqld_performance-schema-consumer-events-transactions-history">performance-schema-consumer-events-transactions-history</a></code>:
          Configure events-transactions-history consumer. Added in MySQL
          5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#option_mysqld_performance-schema-consumer-events-transactions-history-long">performance-schema-consumer-events-transactions-history-long</a></code>:
          Configure events-transactions-history-long consumer. Added in
          MySQL 5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_events_transactions_history_long_size">performance_schema_events_transactions_history_long_size</a></code>:
          Number of rows in the events_transactions_history_long table.
          Added in MySQL 5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_events_transactions_history_size">performance_schema_events_transactions_history_size</a></code>:
          Number of rows per thread in the events_transactions_history
          table. Added in MySQL 5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_digest_length">performance_schema_max_digest_length</a></code>:
          The maximum Performance Schema digest size in bytes. Added in
          MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_index_stat">performance_schema_max_index_stat</a></code>:
          Maximum number of indexes to keep statistics for. Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_memory_classes">performance_schema_max_memory_classes</a></code>:
          The maximum number of memory instruments. Added in MySQL
          5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_metadata_locks">performance_schema_max_metadata_locks</a></code>:
          The maximum number of metadata locks to track. Added in MySQL
          5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_prepared_statements_instances">performance_schema_max_prepared_statements_instances</a></code>:
          Number of rows in the prepared_statements_instances table.
          Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_program_instances">performance_schema_max_program_instances</a></code>:
          The maximum number of stored programs for statistics. Added in
          MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_sql_text_length">performance_schema_max_sql_text_length</a></code>:
          The maximum number of bytes stored from SQL statements. Added
          in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_statement_stack">performance_schema_max_statement_stack</a></code>:
          The maximum stored program nesting for statistics. Added in
          MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_table_lock_stat">performance_schema_max_table_lock_stat</a></code>:
          Maximum number of tables to keep lock statistics for. Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_range_optimizer_max_mem_size">range_optimizer_max_mem_size</a></code>:
          Limit on range optimizer memory consumption. Added in MySQL
          5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_rbr_exec_mode">rbr_exec_mode</a></code>:
          Allows for switching the server between IDEMPOTENT mode (key
          and some other errors suppressed) and STRICT mode; STRICT mode
          is the default. Added in MySQL 5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_require_secure_transport">require_secure_transport</a></code>:
          Whether client connections must use secure transport. Added in
          MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_rewriter_enabled">rewriter_enabled</a></code>:
          Whether the example query rewrite plugin is enabled. Added in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_rewriter_verbose">rewriter_verbose</a></code>:
          For internal use. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_rpl_semi_sync_master_wait_for_slave_count">rpl_semi_sync_master_wait_for_slave_count</a></code>:
          How many slave acknowledgments the master must receive per
          transaction before proceeding. Added in MySQL 5.7.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_rpl_semi_sync_master_wait_point">rpl_semi_sync_master_wait_point</a></code>:
          The wait point for slave transaction receipt acknowledgment.
          Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_rpl_stop_slave_timeout">rpl_stop_slave_timeout</a></code>:
          Set the number of seconds that STOP SLAVE waits before timing
          out. Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_session_track_gtids">session_track_gtids</a></code>:
          Enables a tracker which can be configured to track different
          GTIDs. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_session_track_schema">session_track_schema</a></code>:
          Whether to track schema changes. Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_session_track_state_change">session_track_state_change</a></code>:
          Whether to track session state changes. Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_session_track_system_variables">session_track_system_variables</a></code>:
          Session variables to track changes for. Added in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_session_track_transaction_info">session_track_transaction_info</a></code>:
          How to perform transaction tracking. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_sha256_password_auto_generate_rsa_keys">sha256_password_auto_generate_rsa_keys</a></code>:
          Whether to autogenerate RSA key-pair files. Added in MySQL
          5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_sha256_password_proxy_users">sha256_password_proxy_users</a></code>:
          Whether the sha256_password authentication plugin does
          proxying. Added in MySQL 5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_compatibility_56">show_compatibility_56</a></code>:
          Compatibility for SHOW STATUS/VARIABLES. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_create_table_verbosity">show_create_table_verbosity</a></code>:
          Whether to display ROW_FORMAT in SHOW CREATE TABLE even if it
          has the default value. Added in MySQL 5.7.22.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_old_temporals">show_old_temporals</a></code>:
          Whether SHOW CREATE TABLE should indicate pre-5.6.4 temporal
          columns. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">simplified_binlog_gtid_recovery</code>: Renamed to
          binlog_gtid_simple_recovery. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_slave_parallel_type">slave_parallel_type</a></code>:
          Tells the slave to use timestamp information (LOGICAL_CLOCK)
          or database partioning (DATABASE) to parallelize transactions.
          Added in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_slave_preserve_commit_order">slave_preserve_commit_order</a></code>:
          Ensures that all commits by slave workers happen in the same
          order as on the master to maintain consistency when using
          parallel applier threads. Added in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_super_read_only">super_read_only</a></code>:
          Whether to ignore SUPER exceptions to read-only mode. Added in
          MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_algorithm">thread_pool_algorithm</a></code>:
          The thread pool algorithm. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_high_priority_connection">thread_pool_high_priority_connection</a></code>:
          Whether the current session is high priority. Added in MySQL
          5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_max_unused_threads">thread_pool_max_unused_threads</a></code>:
          Maximum permissible number of unused threads. Added in MySQL
          5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_prio_kickup_timer">thread_pool_prio_kickup_timer</a></code>:
          How long before a statement is moved to high-priority
          execution. Added in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_size">thread_pool_size</a></code>:
          Number of thread groups in the thread pool. Added in MySQL
          5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_stall_limit">thread_pool_stall_limit</a></code>:
          How long before a statement is defined as stalled. Added in
          MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_tls_version">tls_version</a></code>:
          Permissible TLS protocols for encrypted connections. Added in
          MySQL 5.7.10.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_transaction_write_set_extraction">transaction_write_set_extraction</a></code>:
          Defines the algorithm used to hash the writes extracted during
          a transaction. Added in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password_check_user_name">validate_password_check_user_name</a></code>:
          Whether to check passwords against user name. Added in MySQL
          5.7.15.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_validate_password_dictionary_file_last_parsed">validate_password_dictionary_file_last_parsed</a></code>:
          When the dictionary file was last parsed. Added in MySQL
          5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_validate_password_dictionary_file_words_count">validate_password_dictionary_file_words_count</a></code>:
          Number of words in dictionary file. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_version_tokens_session">version_tokens_session</a></code>:
          Client token list for Version Tokens. Added in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_version_tokens_session_number">version_tokens_session_number</a></code>:
          For internal use. Added in MySQL 5.7.8.
</p></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="optvars-deprecated"></a>Options and Variables Deprecated in MySQL 5.7</h3>

</div>

</div>

</div>
<p>
      The following system variables, status variables, and options have
      been deprecated in MySQL 5.7.
</p>
<div class="itemizedlist">
<a name="optvars-deprecated-list"></a><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Innodb_available_undo_logs">Innodb_available_undo_logs</a></code>:
          Display the total number of InnoDB rollback segments;
          different from innodb_rollback_segments, which displays the
          number of active rollback segments. Deprecated as of MySQL
          5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_free_blocks">Qcache_free_blocks</a></code>:
          Number of free memory blocks in the query cache. Deprecated as
          of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_free_memory">Qcache_free_memory</a></code>:
          The amount of free memory for the query cache. Deprecated as
          of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_hits">Qcache_hits</a></code>:
          Number of query cache hits. Deprecated as of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_inserts">Qcache_inserts</a></code>:
          Number of query cache inserts. Deprecated as of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_lowmem_prunes">Qcache_lowmem_prunes</a></code>:
          Number of queries that were deleted from the query cache due
          to lack of free memory in the cache. Deprecated as of MySQL
          5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_not_cached">Qcache_not_cached</a></code>:
          Number of noncached queries (not cacheable, or not cached due
          to the query_cache_type setting). Deprecated as of MySQL
          5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_queries_in_cache">Qcache_queries_in_cache</a></code>:
          Number of queries registered in the query cache. Deprecated as
          of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_total_blocks">Qcache_total_blocks</a></code>:
          The total number of blocks in the query cache. Deprecated as
          of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_heartbeat_period">Slave_heartbeat_period</a></code>:
          The slave's replication heartbeat interval, in seconds.
          Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_last_heartbeat">Slave_last_heartbeat</a></code>:
          Shows when the latest heartbeat signal was received, in
          TIMESTAMP format. Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_received_heartbeats">Slave_received_heartbeats</a></code>:
          Number of heartbeats received by a replication slave since
          previous reset. Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_retried_transactions">Slave_retried_transactions</a></code>:
          The total number of times since startup that the replication
          slave SQL thread has retried transactions. Deprecated as of
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_running">Slave_running</a></code>:
          The state of this server as a replication slave (slave I/O
          thread status). Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_avoid_temporal_upgrade">avoid_temporal_upgrade</a></code>:
          Whether ALTER TABLE should upgrade pre-5.6.4 temporal columns.
          Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_max_flush_queue_time">binlog_max_flush_queue_time</a></code>:
          How long to read transactions before flushing to binary log.
          Deprecated as of MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_bootstrap">bootstrap</a></code>:
          Used by mysql installation scripts. Deprecated as of MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_des-key-file">des-key-file</a></code>:
          Load keys for des_encrypt() and des_encrypt from given file.
          Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_disable-partition-engine-check">disable-partition-engine-check</a></code>:
          Whether to disable the startup check for tables with nonnative
          partitioning. Deprecated as of MySQL 5.7.17.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_allow_local_disjoint_gtids_join">group_replication_allow_local_disjoint_gtids_join</a></code>:
          Allow the current server to join the group even if it has
          transactions not present in the group. Deprecated as of MySQL
          5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_have_crypt">have_crypt</a></code>:
          Availability of the crypt() system call. Deprecated as of
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_have_query_cache">have_query_cache</a></code>:
          Whether mysqld supports query cache. Deprecated as of MySQL
          5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_ignore-db-dir">ignore-db-dir</a></code>:
          Treat directory as nondatabase directory. Deprecated as of
          MySQL 5.7.16.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_ignore_db_dirs">ignore_db_dirs</a></code>:
          Directories treated as nondatabase directories. Deprecated as
          of MySQL 5.7.16.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#option_mysqld_innodb">innodb</a></code>:
          Enable InnoDB (if this version of MySQL supports it).
          Deprecated as of MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_file_format">innodb_file_format</a></code>:
          The format for new InnoDB tables. Deprecated as of MySQL
          5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_file_format_check">innodb_file_format_check</a></code>:
          Whether InnoDB performs file format compatibility checking.
          Deprecated as of MySQL 5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_file_format_max">innodb_file_format_max</a></code>:
          The file format tag in the shared tablespace. Deprecated as of
          MySQL 5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_large_prefix">innodb_large_prefix</a></code>:
          Enables longer keys for column prefix indexes. Deprecated as
          of MySQL 5.7.7.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_support_xa">innodb_support_xa</a></code>:
          Enable InnoDB support for the XA two-phase commit. Deprecated
          as of MySQL 5.7.10.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_logs">innodb_undo_logs</a></code>:
          Defines the number of undo logs (rollback segments) used by
          InnoDB; an alias for innodb_rollback_segments. Deprecated as
          of MySQL 5.7.19.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_tablespaces">innodb_undo_tablespaces</a></code>:
          Number of tablespace files that rollback segments are divided
          between. Deprecated as of MySQL 5.7.21.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_log-warnings">log-warnings</a></code>:
          Log some noncritical warnings to the log file. Deprecated as
          of MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_metadata_locks_cache_size">metadata_locks_cache_size</a></code>:
          Size of the metadata locks cache. Deprecated as of MySQL
          5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_metadata_locks_hash_instances">metadata_locks_hash_instances</a></code>:
          Number of metadata lock hashes. Deprecated as of MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_old_passwords">old_passwords</a></code>:
          Selects password hashing method for PASSWORD(). Deprecated as
          of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_partition">partition</a></code>:
          Enable (or disable) partitioning support. Deprecated as of
          MySQL 5.7.16.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_limit">query_cache_limit</a></code>:
          Do not cache results that are bigger than this. Deprecated as
          of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_min_res_unit">query_cache_min_res_unit</a></code>:
          Minimal size of unit in which space for results is allocated
          (last unit will be trimmed after writing all result data).
          Deprecated as of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_size">query_cache_size</a></code>:
          The memory allocated to store results from old queries.
          Deprecated as of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_type">query_cache_type</a></code>:
          Query cache type. Deprecated as of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_wlock_invalidate">query_cache_wlock_invalidate</a></code>:
          Invalidate queries in query cache on LOCK for write.
          Deprecated as of MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_secure_auth">secure_auth</a></code>:
          Disallow authentication for accounts that have old (pre-4.1)
          passwords. Deprecated as of MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_compatibility_56">show_compatibility_56</a></code>:
          Compatibility for SHOW STATUS/VARIABLES. Deprecated as of
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_old_temporals">show_old_temporals</a></code>:
          Whether SHOW CREATE TABLE should indicate pre-5.6.4 temporal
          columns. Deprecated as of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_skip-partition">skip-partition</a></code>:
          Do not enable user-defined partitioning. Deprecated as of
          MySQL 5.7.16.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_sync_frm">sync_frm</a></code>:
          Sync .frm to disk on create. Enabled by default. Deprecated as
          of MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_temp-pool">temp-pool</a></code>:
          Using this option will cause most temporary files created to
          use a small set of names, rather than a unique name for each
          new file. Deprecated as of MySQL 5.7.18.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_tx_isolation">tx_isolation</a></code>:
          The default transaction isolation level. Deprecated as of
          MySQL 5.7.20.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_tx_read_only">tx_read_only</a></code>:
          Default transaction access mode. Deprecated as of MySQL
          5.7.20.
</p></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="optvars-removed"></a>Options and Variables Removed in MySQL 5.7</h3>

</div>

</div>

</div>
<p>
      The following system variables, status variables, and options have
      been removed in MySQL 5.7.
</p>
<div class="itemizedlist">
<a name="optvars-removed-list"></a><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal">Com_show_slave_status_nonblocking</code>: Count of
          SHOW SLAVE STATUS NONBLOCKING statements. Removed in MySQL
          5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">Max_statement_time_exceeded</code>: Number of
          statements that exceeded the execution timeout value. Removed
          in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal">Max_statement_time_set</code>: Number of
          statements for which execution timeout was set. Removed in
          MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal">Max_statement_time_set_failed</code>: Number of
          statements for which execution timeout setting failed. Removed
          in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal">binlogging_impossible_mode</code>: Deprecated and
          later removed. Use binlog_error_action instead. Removed in
          MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">default-authentication-plugin</code>: The default
          authentication plugin. Removed in MySQL 5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal">executed_gtids_compression_period</code>: Renamed
          to gtid_executed_compression_period. Removed in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">innodb_additional_mem_pool_size</code>: Size of a
          memory pool InnoDB uses to store data dictionary information
          and other internal data structures. Removed in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal">innodb_log_checksum_algorithm</code>: Specifies
          how to generate and verify the checksum stored in each redo
          log disk block. Removed in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal">innodb_optimize_point_storage</code>: Enable this
          option to store POINT data as fixed-length data rather than a
          variable-length data. Removed in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">innodb_use_sys_malloc</code>: Whether InnoDB uses
          the OS or its own memory allocator. Removed in MySQL 5.7.4.
        </p></li><li class="listitem"><p>
          <code class="literal">log-slow-admin-statements</code>: Log slow
          OPTIMIZE, ANALYZE, ALTER and other administrative statements
          to the slow query log if it is open. Removed in MySQL 5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal">log-slow-slave-statements</code>: Cause slow
          statements as executed by the slave to be written to the slow
          query log. Removed in MySQL 5.7.1.
        </p></li><li class="listitem"><p>
          <code class="literal">log_backward_compatible_user_definitions</code>:
          Whether to log CREATE/ALTER USER, GRANT in backward-compatible
          fashion. Removed in MySQL 5.7.9.
        </p></li><li class="listitem"><p>
          <code class="literal">max_statement_time</code>: Statement execution
          timeout value. Removed in MySQL 5.7.8.
        </p></li><li class="listitem"><p>
          <code class="literal">simplified_binlog_gtid_recovery</code>: Renamed to
          binlog_gtid_simple_recovery. Removed in MySQL 5.7.6.
        </p></li><li class="listitem"><p>
          <code class="literal">storage_engine</code>: The default storage engine.
          Removed in MySQL 5.7.5.
        </p></li><li class="listitem"><p>
          <code class="literal">thread_concurrency</code>: Permits the application
          to give the threads system a hint for the desired number of
          threads that should be run at the same time. Removed in MySQL
          5.7.2.
        </p></li><li class="listitem"><p>
          <code class="literal">timed_mutexes</code>: Specify whether to time
          mutexes (only InnoDB mutexes are currently supported). Removed
          in MySQL 5.7.5.
</p></li></ul>
</div>

</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="information-sources"></a>1.6 MySQL Information Sources</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#mysql-web-sites">1.6.1 MySQL Websites</a></span></dt><dt><span class="section"><a href="introduction.html#forums">1.6.2 MySQL Community Support at the MySQL Forums</a></span></dt><dt><span class="section"><a href="introduction.html#mysql-enterprise-information">1.6.3 MySQL Enterprise</a></span></dt></dl>
</div>
<p>
    This section lists sources of additional information that you may
    find helpful, such as MySQL websites, mailing lists, user forums,
    and Internet Relay Chat.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="mysql-web-sites"></a>1.6.1 MySQL Websites</h3>
</div>
</div>
</div>
<a class="indexterm" name="idm46734428791968"></a><a class="indexterm" name="idm46734428790480"></a><p>
      The primary website for MySQL documentation is
      <a class="ulink" href="https://dev.mysql.com/doc/" target="_top">https://dev.mysql.com/doc/</a>. Online and downloadable
      documentation formats are available for the MySQL Reference
      Manual, MySQL Connectors, and more.
    </p><p>
      The MySQL developers provide information about new and upcoming
      features as the <a class="ulink" href="http://mysqlserverteam.com/" target="_top">MySQL
      Server Blog</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="forums"></a>1.6.2 MySQL Community Support at the MySQL Forums</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428785360"></a><a class="indexterm" name="idm46734428783904"></a><p>
      The forums at <a class="ulink" href="http://forums.mysql.com" target="_top">http://forums.mysql.com</a> are an
      important community resource. Many forums are available, grouped
      into these general categories:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Migration
        </p></li><li class="listitem"><p>
          MySQL Usage
        </p></li><li class="listitem"><p>
          MySQL Connectors
        </p></li><li class="listitem"><p>
          Programming Languages
        </p></li><li class="listitem"><p>
          Tools
        </p></li><li class="listitem"><p>
          3rd-Party Applications
        </p></li><li class="listitem"><p>
          Storage Engines
        </p></li><li class="listitem"><p>
          MySQL Technology
        </p></li><li class="listitem"><p>
          SQL Standards
        </p></li><li class="listitem"><p>
          Business
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="mysql-enterprise-information"></a>1.6.3 MySQL Enterprise</h3>

</div>

</div>

</div>
<p>
      Oracle offers technical support in the form of MySQL Enterprise.
      For organizations that rely on the MySQL DBMS for
      business-critical production applications, MySQL Enterprise is a
      commercial subscription offering which includes:

</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            MySQL Enterprise Server
          </p></li><li class="listitem"><p>
            MySQL Enterprise Monitor
          </p></li><li class="listitem"><p>
            Monthly Rapid Updates and Quarterly Service Packs
          </p></li><li class="listitem"><p>
            MySQL Knowledge Base
          </p></li><li class="listitem"><p>
            24x7 Technical and Consultative Support
</p></li></ul>
</div>
<p>

      MySQL Enterprise is available in multiple tiers, giving you the
      flexibility to choose the level of service that best matches your
      needs. For more information, see
      <a class="ulink" href="https://www.mysql.com/products/enterprise/" target="_top">MySQL Enterprise</a>.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="bug-reports"></a>1.7 How to Report Bugs or Problems</h2>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428764096"></a><a class="indexterm" name="idm46734428762672"></a><a class="indexterm" name="idm46734428761184"></a><a class="indexterm" name="idm46734428759696"></a><a class="indexterm" name="idm46734428758208"></a><a class="indexterm" name="idm46734428756720"></a><a class="indexterm" name="idm46734428755232"></a><a class="indexterm" name="idm46734428753744"></a><a class="indexterm" name="idm46734428752256"></a><a class="indexterm" name="idm46734428751184"></a><p>
    Before posting a bug report about a problem, please try to verify
    that it is a bug and that it has not been reported already:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Start by searching the MySQL online manual at
        <a class="ulink" href="https://dev.mysql.com/doc/" target="_top">https://dev.mysql.com/doc/</a>. We try to keep the manual up to
        date by updating it frequently with solutions to newly found
        problems. In addition, the release notes accompanying the manual
        can be particularly useful since it is quite possible that a
        newer version contains a solution to your problem. The release
        notes are available at the location just given for the manual.
      </p></li><li class="listitem"><p>
        If you get a parse error for an SQL statement, please check your
        syntax closely. If you cannot find something wrong with it, it
        is extremely likely that your current version of MySQL Server
        doesn't support the syntax you are using. If you are using the
        current version and the manual doesn't cover the syntax that you
        are using, MySQL Server doesn't support your statement.
      </p><p>
        If the manual covers the syntax you are using, but you have an
        older version of MySQL Server, you should check the MySQL change
        history to see when the syntax was implemented. In this case,
        you have the option of upgrading to a newer version of MySQL
        Server.
      </p></li><li class="listitem"><p>
        For solutions to some common problems, see
        <a class="xref" href="error-handling.html#problems" title="B.4 Problems and Common Errors">Section B.4, “Problems and Common Errors”</a>.
      </p></li><li class="listitem"><p>
        Search the bugs database at
        <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a> to see whether the bug has
        been reported and fixed.
      </p></li><li class="listitem"><p>
        You can also use <a class="ulink" href="http://www.mysql.com/search/" target="_top">http://www.mysql.com/search/</a> to
        search all the Web pages (including the manual) that are located
        at the MySQL website.
</p></li></ul>
</div>
<p>
    If you cannot find an answer in the manual, the bugs database, or
    the mailing list archives, check with your local MySQL expert. If
    you still cannot find an answer to your question, please use the
    following guidelines for reporting the bug.
  </p><p>
    The normal way to report bugs is to visit
    <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a>, which is the address for our
    bugs database. This database is public and can be browsed and
    searched by anyone. If you log in to the system, you can enter new
    reports.
  </p><p>
    Bugs posted in the bugs database at
    <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a> that are corrected for a given
    release are noted in the release notes.
  </p><p>
    If you find a security bug in MySQL Server, please let us know
    immediately by sending an email message to
    <code class="email">&lt;<a class="email" href="mailto:secalert_us@oracle.com">secalert_us@oracle.com</a>&gt;</code>. Exception: Support customers
    should report all problems, including security bugs, to Oracle
    Support at <a class="ulink" href="http://support.oracle.com/" target="_top">http://support.oracle.com/</a>.
  </p><p>
    To discuss problems with other users, you can use the
    <a class="ulink" href="https://mysqlcommunity.slack.com/" target="_top">MySQL Community
    Slack</a>.
  </p><p>
    Writing a good bug report takes patience, but doing it right the
    first time saves time both for us and for yourself. A good bug
    report, containing a full test case for the bug, makes it very
    likely that we will fix the bug in the next release. This section
    helps you write your report correctly so that you do not waste your
    time doing things that may not help us much or at all. Please read
    this section carefully and make sure that all the information
    described here is included in your report.
  </p><p>
    Preferably, you should test the problem using the latest production
    or development version of MySQL Server before posting. Anyone should
    be able to repeat the bug by just using <code class="literal">mysql test &lt;
    script_file</code> on your test case or by running the shell or
    Perl script that you include in the bug report. Any bug that we are
    able to repeat has a high chance of being fixed in the next MySQL
    release.
  </p><p>
    It is most helpful when a good description of the problem is
    included in the bug report. That is, give a good example of
    everything you did that led to the problem and describe, in exact
    detail, the problem itself. The best reports are those that include
    a full example showing how to reproduce the bug or problem. See
    <a class="xref" href="extending-mysql.html#porting" title="28.5 Debugging and Porting MySQL">Section 28.5, “Debugging and Porting MySQL”</a>.
  </p><p>
    Remember that it is possible for us to respond to a report
    containing too much information, but not to one containing too
    little. People often omit facts because they think they know the
    cause of a problem and assume that some details do not matter. A
    good principle to follow is that if you are in doubt about stating
    something, state it. It is faster and less troublesome to write a
    couple more lines in your report than to wait longer for the answer
    if we must ask you to provide information that was missing from the
    initial report.
  </p><p>
    The most common errors made in bug reports are (a) not including the
    version number of the MySQL distribution that you use, and (b) not
    fully describing the platform on which the MySQL server is installed
    (including the platform type and version number). These are highly
    relevant pieces of information, and in 99 cases out of 100, the bug
    report is useless without them. Very often we get questions like,
    <span class="quote">“<span class="quote">Why doesn't this work for me?</span>”</span> Then we find that the
    feature requested wasn't implemented in that MySQL version, or that
    a bug described in a report has been fixed in newer MySQL versions.
    Errors often are platform-dependent. In such cases, it is next to
    impossible for us to fix anything without knowing the operating
    system and the version number of the platform.
  </p><p>
    If you compiled MySQL from source, remember also to provide
    information about your compiler if it is related to the problem.
    Often people find bugs in compilers and think the problem is
    MySQL-related. Most compilers are under development all the time and
    become better version by version. To determine whether your problem
    depends on your compiler, we need to know what compiler you used.
    Note that every compiling problem should be regarded as a bug and
    reported accordingly.
  </p><p>
    If a program produces an error message, it is very important to
    include the message in your report. If we try to search for
    something from the archives, it is better that the error message
    reported exactly matches the one that the program produces. (Even
    the lettercase should be observed.) It is best to copy and paste the
    entire error message into your report. You should never try to
    reproduce the message from memory.
  </p><p>
    If you have a problem with Connector/ODBC (MyODBC), please try to
    generate a trace file and send it with your report. See
    <a class="ulink" href="https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-support-bug-report.html" target="_top">How to Report Connector/ODBC Problems or Bugs</a>.
  </p><p>
    If your report includes long query output lines from test cases that
    you run with the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> command-line tool, you can
    make the output more readable by using the
    <a class="link" href="programs.html#option_mysql_vertical"><code class="option">--vertical</code></a> option or the
    <code class="literal">\G</code> statement terminator. The
    <a class="link" href="sql-statements.html#explain" title="13.8.2 EXPLAIN Statement"><code class="literal">EXPLAIN SELECT</code></a>
    example later in this section demonstrates the use of
    <code class="literal">\G</code>.
  </p><p>
    Please include the following information in your report:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        The version number of the MySQL distribution you are using (for
        example, MySQL 5.7.10). You can find out which version you are
        running by executing <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin version</strong></span></a>. The
        <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin</strong></span></a> program can be found in the
        <code class="filename">bin</code> directory under your MySQL installation
        directory.
      </p></li><li class="listitem"><p>
        The manufacturer and model of the machine on which you
        experience the problem.
      </p></li><li class="listitem"><p>
        The operating system name and version. If you work with Windows,
        you can usually get the name and version number by
        double-clicking your My Computer icon and pulling down the
        <span class="quote">“<span class="quote">Help/About Windows</span>”</span> menu. For most Unix-like
        operating systems, you can get this information by executing the
        command <code class="literal">uname -a</code>.
      </p></li><li class="listitem"><p>
        Sometimes the amount of memory (real and virtual) is relevant.
        If in doubt, include these values.
      </p></li><li class="listitem"><p>
        The contents of the <code class="filename">docs/INFO_BIN</code> file from
        your MySQL installation. This file contains information about
        how MySQL was configured and compiled.
      </p></li><li class="listitem"><p>
        If you are using a source distribution of the MySQL software,
        include the name and version number of the compiler that you
        used. If you have a binary distribution, include the
        distribution name.
      </p></li><li class="listitem"><p>
        If the problem occurs during compilation, include the exact
        error messages and also a few lines of context around the
        offending code in the file where the error occurs.
      </p></li><li class="listitem"><p>
        If <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> died, you should also report the
        statement that crashed <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>. You can
        usually get this information by running
        <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> with query logging enabled, and then
        looking in the log after <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> crashes. See
        <a class="xref" href="extending-mysql.html#porting" title="28.5 Debugging and Porting MySQL">Section 28.5, “Debugging and Porting MySQL”</a>.
      </p></li><li class="listitem"><p>
        If a database table is related to the problem, include the
        output from the <code class="literal">SHOW CREATE TABLE
        <em class="replaceable"><code>db_name</code></em>.<em class="replaceable"><code>tbl_name</code></em></code>
        statement in the bug report. This is a very easy way to get the
        definition of any table in a database. The information helps us
        create a situation matching the one that you have experienced.
      </p></li><li class="listitem"><p>
        The SQL mode in effect when the problem occurred can be
        significant, so please report the value of the
        <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system variable. For
        stored procedure, stored function, and trigger objects, the
        relevant <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> value is the
        one in effect when the object was created. For a stored
        procedure or function, the <a class="link" href="sql-statements.html#show-create-procedure" title="13.7.5.9 SHOW CREATE PROCEDURE Statement"><code class="literal">SHOW CREATE
        PROCEDURE</code></a> or <a class="link" href="sql-statements.html#show-create-function" title="13.7.5.8 SHOW CREATE FUNCTION Statement"><code class="literal">SHOW CREATE
        FUNCTION</code></a> statement shows the relevant SQL mode, or you
        can query <code class="literal">INFORMATION_SCHEMA</code> for the
        information:
      </p><pre data-lang="sql" class="programlisting">SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE
FROM INFORMATION_SCHEMA.ROUTINES;</pre><p>
        For triggers, you can use this statement:
      </p><pre data-lang="sql" class="programlisting">SELECT EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, TRIGGER_NAME, SQL_MODE
FROM INFORMATION_SCHEMA.TRIGGERS;</pre></li><li class="listitem"><p>
        For performance-related bugs or problems with
        <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> statements, you should
        always include the output of <code class="literal">EXPLAIN SELECT
        ...</code>, and at least the number of rows that the
        <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> statement produces. You
        should also include the output from <code class="literal">SHOW CREATE TABLE
        <em class="replaceable"><code>tbl_name</code></em></code> for each table
        that is involved. The more information you provide about your
        situation, the more likely it is that someone can help you.
      </p><p>
        The following is an example of a very good bug report. The
        statements are run using the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a>
        command-line tool. Note the use of the <code class="literal">\G</code>
        statement terminator for statements that would otherwise provide
        very long output lines that are difficult to read.
      </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SHOW VARIABLES;</code></strong>
mysql&gt; <strong class="userinput"><code>SHOW COLUMNS FROM ...\G</code></strong>
       <em class="replaceable"><code>&lt;output from SHOW COLUMNS&gt;</code></em>
mysql&gt; <strong class="userinput"><code>EXPLAIN SELECT ...\G</code></strong>
       <em class="replaceable"><code>&lt;output from EXPLAIN&gt;</code></em>
mysql&gt; <strong class="userinput"><code>FLUSH STATUS;</code></strong>
mysql&gt; <strong class="userinput"><code>SELECT ...;</code></strong>
       <em class="replaceable"><code>&lt;A short version of the output from SELECT,
       including the time taken to run the query&gt;</code></em>
mysql&gt; <strong class="userinput"><code>SHOW STATUS;</code></strong>
       <em class="replaceable"><code>&lt;output from SHOW STATUS&gt;</code></em>
</pre></li><li class="listitem"><p>
        If a bug or problem occurs while running
        <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>, try to provide an input script that
        reproduces the anomaly. This script should include any necessary
        source files. The more closely the script can reproduce your
        situation, the better. If you can make a reproducible test case,
        you should upload it to be attached to the bug report.
      </p><p>
        If you cannot provide a script, you should at least include the
        output from <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin variables extended-status
        processlist</strong></span></a> in your report to provide some information
        on how your system is performing.
      </p></li><li class="listitem"><p>
        If you cannot produce a test case with only a few rows, or if
        the test table is too big to be included in the bug report (more
        than 10 rows), you should dump your tables using
        <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> and create a
        <code class="filename">README</code> file that describes your problem.
        Create a compressed archive of your files using
        <span class="command"><strong>tar</strong></span> and <span class="command"><strong>gzip</strong></span> or
        <span class="command"><strong>zip</strong></span>. After you initiate a bug report for our
        bugs database at <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a>, click
        the Files tab in the bug report for instructions on uploading
        the archive to the bugs database.
      </p></li><li class="listitem"><p>
        If you believe that the MySQL server produces a strange result
        from a statement, include not only the result, but also your
        opinion of what the result should be, and an explanation
        describing the basis for your opinion.
      </p></li><li class="listitem"><p>
        When you provide an example of the problem, it is better to use
        the table names, variable names, and so forth that exist in your
        actual situation than to come up with new names. The problem
        could be related to the name of a table or variable. These cases
        are rare, perhaps, but it is better to be safe than sorry. After
        all, it should be easier for you to provide an example that uses
        your actual situation, and it is by all means better for us. If
        you have data that you do not want to be visible to others in
        the bug report, you can upload it using the Files tab as
        previously described. If the information is really top secret
        and you do not want to show it even to us, go ahead and provide
        an example using other names, but please regard this as the last
        choice.
      </p></li><li class="listitem"><p>
        Include all the options given to the relevant programs, if
        possible. For example, indicate the options that you use when
        you start the <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> server, as well as the
        options that you use to run any MySQL client programs. The
        options to programs such as <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> and
        <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a>, and to the
        <span class="command"><strong>configure</strong></span> script, are often key to resolving
        problems and are very relevant. It is never a bad idea to
        include them. If your problem involves a program written in a
        language such as Perl or PHP, please include the language
        processor's version number, as well as the version for any
        modules that the program uses. For example, if you have a Perl
        script that uses the <code class="literal">DBI</code> and
        <code class="literal">DBD::mysql</code> modules, include the version
        numbers for Perl, <code class="literal">DBI</code>, and
        <code class="literal">DBD::mysql</code>.
      </p></li><li class="listitem"><p>
        If your question is related to the privilege system, please
        include the output of <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin reload</strong></span></a>, and
        all the error messages you get when trying to connect. When you
        test your privileges, you should execute <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin
        reload version</strong></span></a> and try to connect with the program
        that gives you trouble.
      </p></li><li class="listitem"><p>
        If you have a patch for a bug, do include it. But do not assume
        that the patch is all we need, or that we can use it, if you do
        not provide some necessary information such as test cases
        showing the bug that your patch fixes. We might find problems
        with your patch or we might not understand it at all. If so, we
        cannot use it.
      </p><p>
        If we cannot verify the exact purpose of the patch, we will not
        use it. Test cases help us here. Show that the patch handles all
        the situations that may occur. If we find a borderline case
        (even a rare one) where the patch will not work, it may be
        useless.
      </p></li><li class="listitem"><p>
        Guesses about what the bug is, why it occurs, or what it depends
        on are usually wrong. Even the MySQL team cannot guess such
        things without first using a debugger to determine the real
        cause of a bug.
      </p></li><li class="listitem"><p>
        Indicate in your bug report that you have checked the reference
        manual and mail archive so that others know you have tried to
        solve the problem yourself.
      </p></li><li class="listitem"><p>
        If your data appears corrupt or you get errors when you access a
        particular table, first check your tables with
        <a class="link" href="sql-statements.html#check-table" title="13.7.2.2 CHECK TABLE Statement"><code class="literal">CHECK TABLE</code></a>. If that statement
        reports any errors:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
            The <code class="literal">InnoDB</code> crash recovery mechanism
            handles cleanup when the server is restarted after being
            killed, so in typical operation there is no need to
            <span class="quote">“<span class="quote">repair</span>”</span> tables. If you encounter an error with
            <code class="literal">InnoDB</code> tables, restart the server and see
            whether the problem persists, or whether the error affected
            only cached data in memory. If data is corrupted on disk,
            consider restarting with the
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_force_recovery"><code class="literal">innodb_force_recovery</code></a>
            option enabled so that you can dump the affected tables.
          </p></li><li class="listitem"><p>
            For non-transactional tables, try to repair them with
            <a class="link" href="sql-statements.html#repair-table" title="13.7.2.5 REPAIR TABLE Statement"><code class="literal">REPAIR TABLE</code></a> or with
            <a class="link" href="programs.html#myisamchk" title="4.6.3 myisamchk — MyISAM Table-Maintenance Utility"><span class="command"><strong>myisamchk</strong></span></a>. See
            <a class="xref" href="server-administration.html" title="Chapter 5 MySQL Server Administration">Chapter 5, <i>MySQL Server Administration</i></a>.
</p></li></ul>
</div>
<p>
        If you are running Windows, please verify the value of
        <a class="link" href="server-administration.html#sysvar_lower_case_table_names"><code class="literal">lower_case_table_names</code></a> using
        the <code class="literal">SHOW VARIABLES LIKE
        'lower_case_table_names'</code> statement. This variable
        affects how the server handles lettercase of database and table
        names. Its effect for a given value should be as described in
        <a class="xref" href="language-structure.html#identifier-case-sensitivity" title="9.2.3 Identifier Case Sensitivity">Section 9.2.3, “Identifier Case Sensitivity”</a>.
      </p></li><li class="listitem"><p>
        If you often get corrupted tables, you should try to find out
        when and why this happens. In this case, the error log in the
        MySQL data directory may contain some information about what
        happened. (This is the file with the <code class="filename">.err</code>
        suffix in the name.) See <a class="xref" href="server-administration.html#error-log" title="5.4.2 The Error Log">Section 5.4.2, “The Error Log”</a>. Please
        include any relevant information from this file in your bug
        report. Normally <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> should
        <span class="emphasis"><em>never</em></span> crash a table if nothing killed it in
        the middle of an update. If you can find the cause of
        <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> dying, it is much easier for us to
        provide you with a fix for the problem. See
        <a class="xref" href="error-handling.html#what-is-crashing" title="B.4.1 How to Determine What Is Causing a Problem">Section B.4.1, “How to Determine What Is Causing a Problem”</a>.
      </p></li><li class="listitem"><p>
        If possible, download and install the most recent version of
        MySQL Server and check whether it solves your problem. All
        versions of the MySQL software are thoroughly tested and should
        work without problems. We believe in making everything as
        backward-compatible as possible, and you should be able to
        switch MySQL versions without difficulty. See
        <a class="xref" href="installing.html#which-version" title="2.1.1 Which MySQL Version and Distribution to Install">Section 2.1.1, “Which MySQL Version and Distribution to Install”</a>.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="compatibility"></a>1.8 MySQL Standards Compliance</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#extensions-to-ansi">1.8.1 MySQL Extensions to Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#differences-from-ansi">1.8.2 MySQL Differences from Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#constraints">1.8.3 How MySQL Deals with Constraints</a></span></dt></dl>
</div>
<a class="indexterm" name="idm46734428623216"></a><a class="indexterm" name="idm46734428621760"></a><a class="indexterm" name="idm46734428620688"></a><a class="indexterm" name="idm46734428619200"></a><a class="indexterm" name="idm46734428617712"></a><p>
      This section describes how MySQL relates to the ANSI/ISO SQL
      standards. MySQL Server has many extensions to the SQL standard,
      and here you can find out what they are and how to use them. You
      can also find information about functionality missing from MySQL
      Server, and how to work around some of the differences.
    </p><p>
      The SQL standard has been evolving since 1986 and several versions
      exist. In this manual, <span class="quote">“<span class="quote">SQL-92</span>”</span> refers to the
      standard released in 1992. <span class="quote">“<span class="quote">SQL:1999</span>”</span>,
      <span class="quote">“<span class="quote">SQL:2003</span>”</span>, <span class="quote">“<span class="quote">SQL:2008</span>”</span>, and
      <span class="quote">“<span class="quote">SQL:2011</span>”</span> refer to the versions of the standard
      released in the corresponding years, with the last being the most
      recent version. We use the phrase <span class="quote">“<span class="quote">the SQL standard</span>”</span>
      or <span class="quote">“<span class="quote">standard SQL</span>”</span> to mean the current version of the
      SQL Standard at any time.
    </p><p>
      One of our main goals with the product is to continue to work
      toward compliance with the SQL standard, but without sacrificing
      speed or reliability. We are not afraid to add extensions to SQL
      or support for non-SQL features if this greatly increases the
      usability of MySQL Server for a large segment of our user base.
      The <a class="link" href="sql-statements.html#handler" title="13.2.4 HANDLER Statement"><code class="literal">HANDLER</code></a> interface is an example
      of this strategy. See <a class="xref" href="sql-statements.html#handler" title="13.2.4 HANDLER Statement">Section 13.2.4, “HANDLER Statement”</a>.
    </p><p>
      We continue to support transactional and nontransactional
      databases to satisfy both mission-critical 24/7 usage and heavy
      Web or logging usage.
    </p><p>
      MySQL Server was originally designed to work with medium-sized
      databases (10-100 million rows, or about 100MB per table) on small
      computer systems. Today MySQL Server handles terabyte-sized
      databases, but the code can also be compiled in a reduced version
      suitable for hand-held and embedded devices. The compact design of
      the MySQL server makes development in both directions possible
      without any conflicts in the source tree.
    </p><p>
      We are not targeting real-time support, although MySQL replication
      capabilities offer significant functionality.
    </p><p>
      MySQL supports ODBC levels 0 to 3.51.
    </p><p>
      MySQL supports high-availability database clustering using the
      <a class="link" href="mysql-cluster.html" title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code class="literal">NDBCLUSTER</code></a> storage engine. See
      <a class="xref" href="mysql-cluster.html" title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6">Chapter 21, <i>MySQL NDB Cluster 7.5 and NDB Cluster 7.6</i></a>.
    </p><p>
      We implement XML functionality which supports most of the W3C
      XPath standard. See <a class="xref" href="functions.html#xml-functions" title="12.11 XML Functions">Section 12.11, “XML Functions”</a>.
    </p><p>
      MySQL (5.7.8 and later) supports a native JSON data type as
      defined by RFC 7159, and based on the ECMAScript standard
      (ECMA-262). See <a class="xref" href="data-types.html#json" title="11.5 The JSON Data Type">Section 11.5, “The JSON Data Type”</a>. MySQL also implements a
      subset of the SQL/JSON functions specified by a pre-publication
      draft of the SQL:2016 standard; see
      <a class="xref" href="functions.html#json-functions" title="12.17 JSON Functions">Section 12.17, “JSON Functions”</a>, for more information.
</p>
<h3><a name="idm46734428600544"></a>Selecting SQL Modes</h3>
<p>
      The MySQL server can operate in different SQL modes, and can apply
      these modes differently for different clients, depending on the
      value of the <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system
      variable. DBAs can set the global SQL mode to match site server
      operating requirements, and each application can set its session
      SQL mode to its own requirements.
    </p><p>
      Modes affect the SQL syntax MySQL supports and the data validation
      checks it performs. This makes it easier to use MySQL in different
      environments and to use MySQL together with other database
      servers.
    </p><p>
      For more information on setting the SQL mode, see
      <a class="xref" href="server-administration.html#sql-mode" title="5.1.10 Server SQL Modes">Section 5.1.10, “Server SQL Modes”</a>.
</p>
<h3><a name="idm46734428596032"></a>Running MySQL in ANSI Mode</h3>
<a class="indexterm" name="idm46734428595312"></a><a class="indexterm" name="idm46734428593824"></a><p>
      To run MySQL Server in ANSI mode, start <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>
      with the <a class="link" href="server-administration.html#option_mysqld_ansi"><code class="option">--ansi</code></a> option. Running the
      server in ANSI mode is the same as starting it with the following
      options:
    </p><pre data-lang="terminal" class="programlisting">--transaction-isolation=SERIALIZABLE --sql-mode=ANSI</pre><p>
      To achieve the same effect at runtime, execute these two
      statements:
    </p><pre data-lang="sql" class="programlisting">SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'ANSI';</pre><p>
      You can see that setting the
      <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system variable to
      <code class="literal">'ANSI'</code> enables all SQL mode options that are
      relevant for ANSI mode as follows:
    </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SET GLOBAL sql_mode='ANSI';</code></strong>
mysql&gt; <strong class="userinput"><code>SELECT @@GLOBAL.sql_mode;</code></strong>
        -&gt; 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'
</pre><p>
      Running the server in ANSI mode with
      <a class="link" href="server-administration.html#option_mysqld_ansi"><code class="option">--ansi</code></a> is not quite the same as
      setting the SQL mode to <code class="literal">'ANSI'</code> because the
      <a class="link" href="server-administration.html#option_mysqld_ansi"><code class="option">--ansi</code></a> option also sets the
      transaction isolation level.
    </p><p>
      See <a class="xref" href="server-administration.html#server-options" title="5.1.6 Server Command Options">Section 5.1.6, “Server Command Options”</a>.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="extensions-to-ansi"></a>1.8.1 MySQL Extensions to Standard SQL</h3>
</div>
</div>
</div>
<a class="indexterm" name="idm46734428576448"></a><a class="indexterm" name="idm46734428574992"></a><p>
        MySQL Server supports some extensions that you probably will not
        find in other SQL DBMSs. Be warned that if you use them, your
        code will not be portable to other SQL servers. In some cases,
        you can write code that includes MySQL extensions, but is still
        portable, by using comments of the following form:
      </p><pre data-lang="sql" class="programlisting">/*! <em class="replaceable"><code>MySQL-specific code</code></em> */
</pre><p>
        In this case, MySQL Server parses and executes the code within
        the comment as it would any other SQL statement, but other SQL
        servers will ignore the extensions. For example, MySQL Server
        recognizes the <code class="literal">STRAIGHT_JOIN</code> keyword in the
        following statement, but other servers will not:
      </p><pre data-lang="sql" class="programlisting">SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...</pre><p>
        If you add a version number after the <code class="literal">!</code>
        character, the syntax within the comment is executed only if the
        MySQL version is greater than or equal to the specified version
        number. The <code class="literal">KEY_BLOCK_SIZE</code> clause in the
        following comment is executed only by servers from MySQL 5.1.10
        or higher:
      </p><pre data-lang="sql" class="programlisting">CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;</pre><p>
        The following descriptions list MySQL extensions, organized by
        category.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Organization of data on disk
          </p><p>
            MySQL Server maps each database to a directory under the
            MySQL data directory, and maps tables within a database to
            file names in the database directory. This has a few
            implications:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                <a class="indexterm" name="idm46734428563456"></a>

                <a class="indexterm" name="idm46734428561968"></a>

                <a class="indexterm" name="idm46734428560480"></a>

                <a class="indexterm" name="idm46734428558992"></a>

                Database and table names are case-sensitive in MySQL
                Server on operating systems that have case-sensitive
                file names (such as most Unix systems). See
                <a class="xref" href="language-structure.html#identifier-case-sensitivity" title="9.2.3 Identifier Case Sensitivity">Section 9.2.3, “Identifier Case Sensitivity”</a>.
              </p></li><li class="listitem"><p>
                You can use standard system commands to back up, rename,
                move, delete, and copy tables that are managed by the
                <code class="literal">MyISAM</code> storage engine. For example,
                it is possible to rename a <code class="literal">MyISAM</code>
                table by renaming the <code class="filename">.MYD</code>,
                <code class="filename">.MYI</code>, and <code class="filename">.frm</code>
                files to which the table corresponds. (Nevertheless, it
                is preferable to use <a class="link" href="sql-statements.html#rename-table" title="13.1.33 RENAME TABLE Statement"><code class="literal">RENAME
                TABLE</code></a> or <code class="literal">ALTER TABLE ...
                RENAME</code> and let the server rename the files.)
</p></li></ul>
</div>
</li><li class="listitem"><p>
            General language syntax
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                By default, strings can be enclosed by
                <code class="literal">"</code> as well as <code class="literal">'</code>. If
                the <a class="link" href="server-administration.html#sqlmode_ansi_quotes"><code class="literal">ANSI_QUOTES</code></a> SQL
                mode is enabled, strings can be enclosed only by
                <code class="literal">'</code> and the server interprets strings
                enclosed by <code class="literal">"</code> as identifiers.
              </p></li><li class="listitem"><p>
                <code class="literal">\</code> is the escape character in strings.
              </p></li><li class="listitem"><p>
                In SQL statements, you can access tables from different
                databases with the
                <em class="replaceable"><code>db_name.tbl_name</code></em> syntax. Some
                SQL servers provide the same functionality but call this
                <code class="literal">User space</code>. MySQL Server doesn't
                support tablespaces such as used in statements like
                this: <code class="literal">CREATE TABLE ralph.my_table ... IN
                my_tablespace</code>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            SQL statement syntax
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="sql-statements.html#analyze-table" title="13.7.2.1 ANALYZE TABLE Statement"><code class="literal">ANALYZE TABLE</code></a>,
                <a class="link" href="sql-statements.html#check-table" title="13.7.2.2 CHECK TABLE Statement"><code class="literal">CHECK TABLE</code></a>,
                <a class="link" href="sql-statements.html#optimize-table" title="13.7.2.4 OPTIMIZE TABLE Statement"><code class="literal">OPTIMIZE TABLE</code></a>, and
                <a class="link" href="sql-statements.html#repair-table" title="13.7.2.5 REPAIR TABLE Statement"><code class="literal">REPAIR TABLE</code></a> statements.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-statements.html#create-database" title="13.1.11 CREATE DATABASE Statement"><code class="literal">CREATE DATABASE</code></a>,
                <a class="link" href="sql-statements.html#drop-database" title="13.1.22 DROP DATABASE Statement"><code class="literal">DROP DATABASE</code></a>, and
                <a class="link" href="sql-statements.html#alter-database" title="13.1.1 ALTER DATABASE Statement"><code class="literal">ALTER DATABASE</code></a>
                statements. See <a class="xref" href="sql-statements.html#create-database" title="13.1.11 CREATE DATABASE Statement">Section 13.1.11, “CREATE DATABASE Statement”</a>,
                <a class="xref" href="sql-statements.html#drop-database" title="13.1.22 DROP DATABASE Statement">Section 13.1.22, “DROP DATABASE Statement”</a>, and
                <a class="xref" href="sql-statements.html#alter-database" title="13.1.1 ALTER DATABASE Statement">Section 13.1.1, “ALTER DATABASE Statement”</a>.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-statements.html#do" title="13.2.3 DO Statement"><code class="literal">DO</code></a> statement.
              </p></li><li class="listitem"><p>
                <a class="link" href="sql-statements.html#explain" title="13.8.2 EXPLAIN Statement"><code class="literal">EXPLAIN
                SELECT</code></a> to obtain a description of how tables
                are processed by the query optimizer.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-statements.html#flush" title="13.7.6.3 FLUSH Statement"><code class="literal">FLUSH</code></a> and
                <a class="link" href="sql-statements.html#reset" title="13.7.6.6 RESET Statement"><code class="literal">RESET</code></a> statements.
              </p></li><li class="listitem"><p>
                The
                <a class="link" href="sql-statements.html#set-variable" title="13.7.4.1 SET Syntax for Variable Assignment"><code class="literal">SET</code></a>
                statement. See <a class="xref" href="sql-statements.html#set-variable" title="13.7.4.1 SET Syntax for Variable Assignment">Section 13.7.4.1, “SET Syntax for Variable Assignment”</a>.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-statements.html#show" title="13.7.5 SHOW Statements"><code class="literal">SHOW</code></a> statement. See
                <a class="xref" href="sql-statements.html#show" title="13.7.5 SHOW Statements">Section 13.7.5, “SHOW Statements”</a>. The information produced by many
                of the MySQL-specific
                <a class="link" href="sql-statements.html#show" title="13.7.5 SHOW Statements"><code class="literal">SHOW</code></a> statements can be
                obtained in more standard fashion by using
                <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> to query
                <code class="literal">INFORMATION_SCHEMA</code>. See
                <a class="xref" href="information-schema.html" title="Chapter 24 INFORMATION_SCHEMA Tables">Chapter 24, <i>INFORMATION_SCHEMA Tables</i></a>.
              </p></li><li class="listitem"><p>
                <a class="indexterm" name="idm46734428507008"></a>

                <a class="indexterm" name="idm46734428505936"></a>

                Use of <a class="link" href="sql-statements.html#load-data" title="13.2.6 LOAD DATA Statement"><code class="literal">LOAD DATA</code></a>. In many
                cases, this syntax is compatible with Oracle
                <a class="link" href="sql-statements.html#load-data" title="13.2.6 LOAD DATA Statement"><code class="literal">LOAD DATA</code></a>. See
                <a class="xref" href="sql-statements.html#load-data" title="13.2.6 LOAD DATA Statement">Section 13.2.6, “LOAD DATA Statement”</a>.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="sql-statements.html#rename-table" title="13.1.33 RENAME TABLE Statement"><code class="literal">RENAME TABLE</code></a>. See
                <a class="xref" href="sql-statements.html#rename-table" title="13.1.33 RENAME TABLE Statement">Section 13.1.33, “RENAME TABLE Statement”</a>.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="sql-statements.html#replace" title="13.2.8 REPLACE Statement"><code class="literal">REPLACE</code></a> instead of
                <a class="link" href="sql-statements.html#delete" title="13.2.2 DELETE Statement"><code class="literal">DELETE</code></a> plus
                <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a>. See
                <a class="xref" href="sql-statements.html#replace" title="13.2.8 REPLACE Statement">Section 13.2.8, “REPLACE Statement”</a>.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">CHANGE
                <em class="replaceable"><code>col_name</code></em></code>,
                <code class="literal">DROP
                <em class="replaceable"><code>col_name</code></em></code>, or
                <a class="link" href="sql-statements.html#drop-index" title="13.1.25 DROP INDEX Statement"><code class="literal">DROP INDEX</code></a>,
                <code class="literal">IGNORE</code> or <code class="literal">RENAME</code>
                in <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a>
                statements. Use of multiple <code class="literal">ADD</code>,
                <code class="literal">ALTER</code>, <code class="literal">DROP</code>, or
                <code class="literal">CHANGE</code> clauses in an
                <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a> statement.
                See <a class="xref" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement">Section 13.1.8, “ALTER TABLE Statement”</a>.
              </p></li><li class="listitem"><p>
                Use of index names, indexes on a prefix of a column, and
                use of <code class="literal">INDEX</code> or
                <code class="literal">KEY</code> in <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE
                TABLE</code></a> statements. See
                <a class="xref" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement">Section 13.1.18, “CREATE TABLE Statement”</a>.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">TEMPORARY</code> or <code class="literal">IF NOT
                EXISTS</code> with <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE
                TABLE</code></a>.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">IF EXISTS</code> with
                <a class="link" href="sql-statements.html#drop-table" title="13.1.29 DROP TABLE Statement"><code class="literal">DROP TABLE</code></a> and
                <a class="link" href="sql-statements.html#drop-database" title="13.1.22 DROP DATABASE Statement"><code class="literal">DROP DATABASE</code></a>.
              </p></li><li class="listitem"><p>
                The capability of dropping multiple tables with a single
                <a class="link" href="sql-statements.html#drop-table" title="13.1.29 DROP TABLE Statement"><code class="literal">DROP TABLE</code></a> statement.
              </p></li><li class="listitem"><p>
                The <code class="literal">ORDER BY</code> and
                <code class="literal">LIMIT</code> clauses of the
                <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a> and
                <a class="link" href="sql-statements.html#delete" title="13.2.2 DELETE Statement"><code class="literal">DELETE</code></a> statements.
              </p></li><li class="listitem"><p>
                <code class="literal">INSERT INTO <em class="replaceable"><code>tbl_name</code></em>
                SET <em class="replaceable"><code>col_name</code></em> = ...</code>
                syntax.
              </p></li><li class="listitem"><p>
                The <code class="literal">DELAYED</code> clause of the
                <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a> and
                <a class="link" href="sql-statements.html#replace" title="13.2.8 REPLACE Statement"><code class="literal">REPLACE</code></a> statements.
              </p></li><li class="listitem"><p>
                The <code class="literal">LOW_PRIORITY</code> clause of the
                <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a>,
                <a class="link" href="sql-statements.html#replace" title="13.2.8 REPLACE Statement"><code class="literal">REPLACE</code></a>,
                <a class="link" href="sql-statements.html#delete" title="13.2.2 DELETE Statement"><code class="literal">DELETE</code></a>, and
                <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a> statements.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">INTO OUTFILE</code> or <code class="literal">INTO
                DUMPFILE</code> in
                <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> statements. See
                <a class="xref" href="sql-statements.html#select" title="13.2.9 SELECT Statement">Section 13.2.9, “SELECT Statement”</a>.
              </p></li><li class="listitem"><p>
                Options such as <code class="literal">STRAIGHT_JOIN</code> or
                <code class="literal">SQL_SMALL_RESULT</code> in
                <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> statements.
              </p></li><li class="listitem"><p>
                You don't need to name all selected columns in the
                <code class="literal">GROUP BY</code> clause. This gives better
                performance for some very specific, but quite normal
                queries. See
                <a class="xref" href="functions.html#group-by-functions-and-modifiers" title="12.20 Aggregate (GROUP BY) Functions">Section 12.20, “Aggregate (GROUP BY) Functions”</a>.
              </p></li><li class="listitem"><p>
                You can specify <code class="literal">ASC</code> and
                <code class="literal">DESC</code> with <code class="literal">GROUP
                BY</code>, not just with <code class="literal">ORDER BY</code>.
              </p></li><li class="listitem"><p>
                The ability to set variables in a statement with the
                <code class="literal">:=</code> assignment operator. See
                <a class="xref" href="language-structure.html#user-variables" title="9.4 User-Defined Variables">Section 9.4, “User-Defined Variables”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            Data types
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="data-types.html#integer-types" title="11.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"><code class="literal">MEDIUMINT</code></a>,
                <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a>, and
                <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a> data types, and the
                various <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">BLOB</code></a> and
                <a class="link" href="data-types.html#blob" title="11.3.4 The BLOB and TEXT Types"><code class="literal">TEXT</code></a> data types.
              </p></li><li class="listitem"><p>
                The <code class="literal">AUTO_INCREMENT</code>,
                <code class="literal">BINARY</code>, <code class="literal">NULL</code>,
                <code class="literal">UNSIGNED</code>, and
                <code class="literal">ZEROFILL</code> data type attributes.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            Functions and operators
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                To make it easier for users who migrate from other SQL
                environments, MySQL Server supports aliases for many
                functions. For example, all string functions support
                both standard SQL syntax and ODBC syntax.
              </p></li><li class="listitem"><p>
                MySQL Server understands the
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> and
                <a class="link" href="functions.html#operator_and"><code class="literal">&amp;&amp;</code></a>
                operators to mean logical OR and AND, as in the C
                programming language. In MySQL Server,
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> and
                <a class="link" href="functions.html#operator_or"><code class="literal">OR</code></a> are
                synonyms, as are
                <a class="link" href="functions.html#operator_and"><code class="literal">&amp;&amp;</code></a>
                and <a class="link" href="functions.html#operator_and"><code class="literal">AND</code></a>.
                Because of this nice syntax, MySQL Server doesn't
                support the standard SQL
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> operator
                for string concatenation; use
                <a class="link" href="functions.html#function_concat"><code class="literal">CONCAT()</code></a> instead. Because
                <a class="link" href="functions.html#function_concat"><code class="literal">CONCAT()</code></a> takes any number
                of arguments, it is easy to convert use of the
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> operator
                to MySQL Server.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="functions.html#function_count"><code class="literal">COUNT(DISTINCT
                <em class="replaceable"><code>value_list</code></em>)</code></a> where
                <em class="replaceable"><code>value_list</code></em> has more than one
                element.
              </p></li><li class="listitem"><p>
                String comparisons are case-insensitive by default, with
                sort ordering determined by the collation of the current
                character set, which is <code class="literal">latin1</code>
                (cp1252 West European) by default. To perform
                case-sensitive comparisons instead, you should declare
                your columns with the <code class="literal">BINARY</code>
                attribute or use the <code class="literal">BINARY</code> cast,
                which causes comparisons to be done using the underlying
                character code values rather than a lexical ordering.
              </p></li><li class="listitem"><p>
                <a class="indexterm" name="idm46734428397616"></a>

                <a class="indexterm" name="idm46734428396528"></a>

                The <a class="link" href="functions.html#function_mod"><code class="literal">%</code></a>
                operator is a synonym for
                <a class="link" href="functions.html#function_mod"><code class="literal">MOD()</code></a>. That is,
                <code class="literal"><em class="replaceable"><code>N</code></em> %
                <em class="replaceable"><code>M</code></em></code> is equivalent to
                <a class="link" href="functions.html#function_mod"><code class="literal">MOD(<em class="replaceable"><code>N</code></em>,<em class="replaceable"><code>M</code></em>)</code></a>.
                <a class="link" href="functions.html#function_mod"><code class="literal">%</code></a> is
                supported for C programmers and for compatibility with
                PostgreSQL.
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#operator_equal"><code class="literal">=</code></a>,
                <a class="link" href="functions.html#operator_not-equal"><code class="literal">&lt;&gt;</code></a>,
                <a class="link" href="functions.html#operator_less-than-or-equal"><code class="literal">&lt;=</code></a>,
                <a class="link" href="functions.html#operator_less-than"><code class="literal">&lt;</code></a>,
                <a class="link" href="functions.html#operator_greater-than-or-equal"><code class="literal">&gt;=</code></a>,
                <a class="link" href="functions.html#operator_greater-than"><code class="literal">&gt;</code></a>,
                <a class="link" href="functions.html#operator_left-shift"><code class="literal">&lt;&lt;</code></a>,
                <a class="link" href="functions.html#operator_right-shift"><code class="literal">&gt;&gt;</code></a>,
                <a class="link" href="functions.html#operator_equal-to"><code class="literal">&lt;=&gt;</code></a>,
                <a class="link" href="functions.html#operator_and"><code class="literal">AND</code></a>,
                <a class="link" href="functions.html#operator_or"><code class="literal">OR</code></a>, or
                <a class="link" href="functions.html#operator_like"><code class="literal">LIKE</code></a>
                operators may be used in expressions in the output
                column list (to the left of the <code class="literal">FROM</code>)
                in <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT</code></a> statements. For
                example:
              </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SELECT col1=1 AND col2=2 FROM my_table;</code></strong>
</pre></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_last-insert-id"><code class="literal">LAST_INSERT_ID()</code></a>
                function returns the most recent
                <code class="literal">AUTO_INCREMENT</code> value. See
                <a class="xref" href="functions.html#information-functions" title="12.15 Information Functions">Section 12.15, “Information Functions”</a>.
              </p></li><li class="listitem"><p>
                <a class="link" href="functions.html#operator_like"><code class="literal">LIKE</code></a> is permitted on
                numeric values.
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#operator_regexp"><code class="literal">REGEXP</code></a> and
                <a class="link" href="functions.html#operator_not-regexp"><code class="literal">NOT REGEXP</code></a> extended regular
                expression operators.
              </p></li><li class="listitem"><p>
                <a class="link" href="functions.html#function_concat"><code class="literal">CONCAT()</code></a> or
                <a class="link" href="functions.html#function_char"><code class="literal">CHAR()</code></a> with one argument
                or more than two arguments. (In MySQL Server, these
                functions can take a variable number of arguments.)
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_bit-count"><code class="literal">BIT_COUNT()</code></a>,
                <a class="link" href="functions.html#operator_case"><code class="literal">CASE</code></a>,
                <a class="link" href="functions.html#function_elt"><code class="literal">ELT()</code></a>,
                <a class="link" href="functions.html#function_from-days"><code class="literal">FROM_DAYS()</code></a>,
                <a class="link" href="functions.html#function_format"><code class="literal">FORMAT()</code></a>,
                <a class="link" href="functions.html#function_if"><code class="literal">IF()</code></a>,
                <a class="link" href="functions.html#function_password"><code class="literal">PASSWORD()</code></a>,
                <a class="link" href="functions.html#function_encrypt"><code class="literal">ENCRYPT()</code></a>,
                <a class="link" href="functions.html#function_md5"><code class="literal">MD5()</code></a>,
                <a class="link" href="functions.html#function_encode"><code class="literal">ENCODE()</code></a>,
                <a class="link" href="functions.html#function_decode"><code class="literal">DECODE()</code></a>,
                <a class="link" href="functions.html#function_period-add"><code class="literal">PERIOD_ADD()</code></a>,
                <a class="link" href="functions.html#function_period-diff"><code class="literal">PERIOD_DIFF()</code></a>,
                <a class="link" href="functions.html#function_to-days"><code class="literal">TO_DAYS()</code></a>, and
                <a class="link" href="functions.html#function_weekday"><code class="literal">WEEKDAY()</code></a> functions.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="functions.html#function_trim"><code class="literal">TRIM()</code></a> to trim
                substrings. Standard SQL supports removal of single
                characters only.
              </p></li><li class="listitem"><p>
                The <code class="literal">GROUP BY</code> functions
                <a class="link" href="functions.html#function_std"><code class="literal">STD()</code></a>,
                <a class="link" href="functions.html#function_bit-or"><code class="literal">BIT_OR()</code></a>,
                <a class="link" href="functions.html#function_bit-and"><code class="literal">BIT_AND()</code></a>,
                <a class="link" href="functions.html#function_bit-xor"><code class="literal">BIT_XOR()</code></a>, and
                <a class="link" href="functions.html#function_group-concat"><code class="literal">GROUP_CONCAT()</code></a>. See
                <a class="xref" href="functions.html#group-by-functions-and-modifiers" title="12.20 Aggregate (GROUP BY) Functions">Section 12.20, “Aggregate (GROUP BY) Functions”</a>.
</p></li></ul>
</div>
</li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="differences-from-ansi"></a>1.8.2 MySQL Differences from Standard SQL</h3>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#ansi-diff-select-into-table">1.8.2.1 SELECT INTO TABLE Differences</a></span></dt><dt><span class="section"><a href="introduction.html#ansi-diff-update">1.8.2.2 UPDATE Differences</a></span></dt><dt><span class="section"><a href="introduction.html#ansi-diff-foreign-keys">1.8.2.3 FOREIGN KEY Constraint Differences</a></span></dt><dt><span class="section"><a href="introduction.html#ansi-diff-comments">1.8.2.4 '--' as the Start of a Comment</a></span></dt></dl>
</div>
<a class="indexterm" name="idm46734428320032"></a><p>
        We try to make MySQL Server follow the ANSI SQL standard and the
        ODBC SQL standard, but MySQL Server performs operations
        differently in some cases:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            There are several differences between the MySQL and standard
            SQL privilege systems. For example, in MySQL, privileges for
            a table are not automatically revoked when you delete a
            table. You must explicitly issue a
            <a class="link" href="sql-statements.html#revoke" title="13.7.1.6 REVOKE Statement"><code class="literal">REVOKE</code></a> statement to revoke
            privileges for a table. For more information, see
            <a class="xref" href="sql-statements.html#revoke" title="13.7.1.6 REVOKE Statement">Section 13.7.1.6, “REVOKE Statement”</a>.
          </p></li><li class="listitem"><p>
            The <a class="link" href="functions.html#function_cast"><code class="literal">CAST()</code></a> function does not
            support cast to <a class="link" href="data-types.html#floating-point-types" title="11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE"><code class="literal">REAL</code></a> or
            <a class="link" href="data-types.html#integer-types" title="11.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"><code class="literal">BIGINT</code></a>. See
            <a class="xref" href="functions.html#cast-functions" title="12.10 Cast Functions and Operators">Section 12.10, “Cast Functions and Operators”</a>.
</p></li></ul>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-select-into-table"></a>1.8.2.1 SELECT INTO TABLE Differences</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428307824"></a><p>
          MySQL Server doesn't support the <code class="literal">SELECT ... INTO
          TABLE</code> Sybase SQL extension. Instead, MySQL Server
          supports the
          <a class="link" href="sql-statements.html#insert-select" title="13.2.5.1 INSERT ... SELECT Statement"><code class="literal">INSERT INTO ...
          SELECT</code></a> standard SQL syntax, which is basically the
          same thing. See <a class="xref" href="sql-statements.html#insert-select" title="13.2.5.1 INSERT ... SELECT Statement">Section 13.2.5.1, “INSERT ... SELECT Statement”</a>. For example:
        </p><pre data-lang="sql" class="programlisting">INSERT INTO tbl_temp2 (fld_id)
    SELECT tbl_temp1.fld_order_id
    FROM tbl_temp1 WHERE tbl_temp1.fld_order_id &gt; 100;</pre><p>
          Alternatively, you can use
          <a class="link" href="sql-statements.html#select-into" title="13.2.9.1 SELECT ... INTO Statement"><code class="literal">SELECT ... INTO
          OUTFILE</code></a> or
          <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE TABLE ...
          SELECT</code></a>.
        </p><p>
          You can use <a class="link" href="sql-statements.html#select" title="13.2.9 SELECT Statement"><code class="literal">SELECT ...
          INTO</code></a> with user-defined variables. The same syntax
          can also be used inside stored routines using cursors and
          local variables. See <a class="xref" href="sql-statements.html#select-into" title="13.2.9.1 SELECT ... INTO Statement">Section 13.2.9.1, “SELECT ... INTO Statement”</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-update"></a>1.8.2.2 UPDATE Differences</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428295648"></a><p>
          If you access a column from the table to be updated in an
          expression, <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a> uses the
          current value of the column. The second assignment in the
          following statement sets <code class="literal">col2</code> to the
          current (updated) <code class="literal">col1</code> value, not the
          original <code class="literal">col1</code> value. The result is that
          <code class="literal">col1</code> and <code class="literal">col2</code> have the
          same value. This behavior differs from standard SQL.
</p><pre data-lang="sql" class="programlisting">UPDATE t1 SET col1 = col1 + 1, col2 = col1;</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-foreign-keys"></a>1.8.2.3 FOREIGN KEY Constraint Differences</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428286752"></a><a class="indexterm" name="idm46734428285712"></a><p>
          The MySQL implementation of foreign key constraints differs
          from the SQL standard in the following key respects:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              If there are several rows in the parent table with the
              same referenced key value,
              <a class="link" href="innodb-storage-engine.html" title="Chapter 14 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> performs a foreign key
              check as if the other parent rows with the same key value
              do not exist. For example, if you define a
              <code class="literal">RESTRICT</code> type constraint, and there is
              a child row with several parent rows,
              <code class="literal">InnoDB</code> does not permit the deletion of
              any of the parent rows.
            </p></li><li class="listitem"><p>
              If <code class="literal">ON UPDATE CASCADE</code> or <code class="literal">ON
              UPDATE SET NULL</code> recurses to update the
              <span class="emphasis"><em>same table</em></span> it has previously updated
              during the same cascade, it acts like
              <code class="literal">RESTRICT</code>. This means that you cannot
              use self-referential <code class="literal">ON UPDATE CASCADE</code>
              or <code class="literal">ON UPDATE SET NULL</code> operations. This
              is to prevent infinite loops resulting from cascaded
              updates. A self-referential <code class="literal">ON DELETE SET
              NULL</code>, on the other hand, is possible, as is a
              self-referential <code class="literal">ON DELETE CASCADE</code>.
              Cascading operations may not be nested more than 15 levels
              deep.
            </p></li><li class="listitem"><p>
              In an SQL statement that inserts, deletes, or updates many
              rows, foreign key constraints (like unique constraints)
              are checked row-by-row. When performing foreign key
              checks, <a class="link" href="innodb-storage-engine.html" title="Chapter 14 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> sets shared
              row-level locks on child or parent records that it must
              examine. MySQL checks foreign key constraints immediately;
              the check is not deferred to transaction commit. According
              to the SQL standard, the default behavior should be
              deferred checking. That is, constraints are only checked
              after the <span class="emphasis"><em>entire SQL statement</em></span> has
              been processed. This means that it is not possible to
              delete a row that refers to itself using a foreign key.
            </p></li><li class="listitem"><p>
              No storage engine, including <code class="literal">InnoDB</code>,
              recognizes or enforces the <code class="literal">MATCH</code> clause
              used in referential-integrity constraint definitions. Use
              of an explicit <code class="literal">MATCH</code> clause does not
              have the specified effect, and it causes <code class="literal">ON
              DELETE</code> and <code class="literal">ON UPDATE</code> clauses
              to be ignored. Specifying the <code class="literal">MATCH</code>
              should be avoided.
            </p><p>
              The <code class="literal">MATCH</code> clause in the SQL standard
              controls how <code class="literal">NULL</code> values in a composite
              (multiple-column) foreign key are handled when comparing
              to a primary key in the referenced table. MySQL
              essentially implements the semantics defined by
              <code class="literal">MATCH SIMPLE</code>, which permits a foreign
              key to be all or partially <code class="literal">NULL</code>. In
              that case, a (child table) row containing such a foreign
              key can be inserted even though it does not match any row
              in the referenced (parent) table. (It is possible to
              implement other semantics using triggers.)
            </p></li><li class="listitem"><p>
              MySQL requires that the referenced columns be indexed for
              performance reasons. However, MySQL does not enforce a
              requirement that the referenced columns be
              <code class="literal">UNIQUE</code> or be declared <code class="literal">NOT
              NULL</code>.
            </p><p>
              A <code class="literal">FOREIGN KEY</code> constraint that
              references a non-<code class="literal">UNIQUE</code> key is not
              standard SQL but rather an
              <a class="link" href="innodb-storage-engine.html" title="Chapter 14 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> extension. The
              <a class="link" href="mysql-cluster.html" title="Chapter 21 MySQL NDB Cluster 7.5 and NDB Cluster 7.6"><code class="literal">NDB</code></a> storage engine, on the
              other hand, requires an explicit unique key (or primary
              key) on any column referenced as a foreign key.
            </p><p>
              The handling of foreign key references to nonunique keys
              or keys that contain <code class="literal">NULL</code> values is not
              well defined for operations such as
              <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a> or <code class="literal">DELETE
              CASCADE</code>. You are advised to use foreign keys
              that reference only <code class="literal">UNIQUE</code> (including
              <code class="literal">PRIMARY</code>) and <code class="literal">NOT
              NULL</code> keys.
            </p></li><li class="listitem"><p>
              MySQL parses but ignores <span class="quote">“<span class="quote">inline
              <code class="literal">REFERENCES</code> specifications</span>”</span> (as
              defined in the SQL standard) where the references are
              defined as part of the column specification. MySQL accepts
              <code class="literal">REFERENCES</code> clauses only when specified
              as part of a separate <code class="literal">FOREIGN KEY</code>
              specification. For storage engines that do not support
              foreign keys (such as
              <a class="link" href="storage-engines.html#myisam-storage-engine" title="15.2 The MyISAM Storage Engine"><code class="literal">MyISAM</code></a>), MySQL Server parses
              and ignores foreign key specifications.
</p></li></ul>
</div>
<p>
          For information about foreign key constraints, see
          <a class="xref" href="sql-statements.html#create-table-foreign-keys" title="13.1.18.5 FOREIGN KEY Constraints">Section 13.1.18.5, “FOREIGN KEY Constraints”</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-comments"></a>1.8.2.4 '--' as the Start of a Comment</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428240528"></a><a class="indexterm" name="idm46734428239072"></a><p>
          Standard SQL uses the C syntax <code class="literal">/* this is a comment
          */</code> for comments, and MySQL Server supports this
          syntax as well. MySQL also support extensions to this syntax
          that enable MySQL-specific SQL to be embedded in the comment,
          as described in <a class="xref" href="language-structure.html#comments" title="9.6 Comment Syntax">Section 9.6, “Comment Syntax”</a>.
        </p><p>
          Standard SQL uses <span class="quote">“<span class="quote"><code class="option">--</code></span>”</span> as a
          start-comment sequence. MySQL Server uses <code class="literal">#</code>
          as the start comment character. MySQL Server also supports a
          variant of the <code class="literal">--</code> comment style. That is,
          the <code class="literal">--</code> start-comment sequence must be
          followed by a space (or by a control character such as a
          newline). The space is required to prevent problems with
          automatically generated SQL queries that use constructs such
          as the following, where we automatically insert the value of
          the payment for <code class="literal">payment</code>:
        </p><pre data-lang="sql" class="programlisting">UPDATE account SET credit=credit-payment</pre><p>
          Consider about what happens if <code class="literal">payment</code> has
          a negative value such as <code class="literal">-1</code>:
        </p><pre data-lang="sql" class="programlisting">UPDATE account SET credit=credit--1</pre><p>
          <code class="literal">credit--1</code> is a valid expression in SQL, but
          <code class="literal">--</code> is interpreted as the start of a
          comment, part of the expression is discarded. The result is a
          statement that has a completely different meaning than
          intended:
        </p><pre data-lang="sql" class="programlisting">UPDATE account SET credit=credit</pre><p>
          The statement produces no change in value at all. This
          illustrates that permitting comments to start with
          <code class="literal">--</code> can have serious consequences.
        </p><p>
          Using our implementation requires a space following the
          <code class="literal">--</code> for it to be recognized as a
          start-comment sequence in MySQL Server. Therefore,
          <code class="literal">credit--1</code> is safe to use.
        </p><p>
          Another safe feature is that the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a>
          command-line client ignores lines that start with
          <code class="literal">--</code>.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="constraints"></a>1.8.3 How MySQL Deals with Constraints</h3>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#constraint-primary-key">1.8.3.1 PRIMARY KEY and UNIQUE Index Constraints</a></span></dt><dt><span class="section"><a href="introduction.html#constraint-foreign-key">1.8.3.2 FOREIGN KEY Constraints</a></span></dt><dt><span class="section"><a href="introduction.html#constraint-invalid-data">1.8.3.3 Constraints on Invalid Data</a></span></dt><dt><span class="section"><a href="introduction.html#constraint-enum">1.8.3.4 ENUM and SET Constraints</a></span></dt></dl>
</div>
<a class="indexterm" name="idm46734428217184"></a><p>
        MySQL enables you to work both with transactional tables that
        permit rollback and with nontransactional tables that do not.
        Because of this, constraint handling is a bit different in MySQL
        than in other DBMSs. We must handle the case when you have
        inserted or updated a lot of rows in a nontransactional table
        for which changes cannot be rolled back when an error occurs.
      </p><p>
        The basic philosophy is that MySQL Server tries to produce an
        error for anything that it can detect while parsing a statement
        to be executed, and tries to recover from any errors that occur
        while executing the statement. We do this in most cases, but not
        yet for all.
      </p><p>
        The options MySQL has when an error occurs are to stop the
        statement in the middle or to recover as well as possible from
        the problem and continue. By default, the server follows the
        latter course. This means, for example, that the server may
        coerce invalid values to the closest valid values.
      </p><p>
        Several SQL mode options are available to provide greater
        control over handling of bad data values and whether to continue
        statement execution or abort when errors occur. Using these
        options, you can configure MySQL Server to act in a more
        traditional fashion that is like other DBMSs that reject
        improper input. The SQL mode can be set globally at server
        startup to affect all clients. Individual clients can set the
        SQL mode at runtime, which enables each client to select the
        behavior most appropriate for its requirements. See
        <a class="xref" href="server-administration.html#sql-mode" title="5.1.10 Server SQL Modes">Section 5.1.10, “Server SQL Modes”</a>.
      </p><p>
        The following sections describe how MySQL Server handles
        different types of constraints.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-primary-key"></a>1.8.3.1 PRIMARY KEY and UNIQUE Index Constraints</h4>
</div>
</div>
</div>
<a class="indexterm" name="idm46734428210512"></a><a class="indexterm" name="idm46734428209056"></a><a class="indexterm" name="idm46734428207568"></a><p>
          Normally, errors occur for data-change statements (such as
          <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a> or
          <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a>) that would violate
          primary-key, unique-key, or foreign-key constraints. If you
          are using a transactional storage engine such as
          <code class="literal">InnoDB</code>, MySQL automatically rolls back the
          statement. If you are using a nontransactional storage engine,
          MySQL stops processing the statement at the row for which the
          error occurred and leaves any remaining rows unprocessed.
        </p><p>
          MySQL supports an <code class="literal">IGNORE</code> keyword for
          <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a>,
          <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a>, and so forth. If you
          use it, MySQL ignores primary-key or unique-key violations and
          continues processing with the next row. See the section for
          the statement that you are using (<a class="xref" href="sql-statements.html#insert" title="13.2.5 INSERT Statement">Section 13.2.5, “INSERT Statement”</a>,
          <a class="xref" href="sql-statements.html#update" title="13.2.11 UPDATE Statement">Section 13.2.11, “UPDATE Statement”</a>, and so forth).
        </p><p>
          You can get information about the number of rows actually
          inserted or updated with the
          <a class="link" href="connectors-apis.html#mysql-info" title="27.7.6.36 mysql_info()"><code class="literal">mysql_info()</code></a> C API function.
          You can also use the <a class="link" href="sql-statements.html#show-warnings" title="13.7.5.40 SHOW WARNINGS Statement"><code class="literal">SHOW
          WARNINGS</code></a> statement. See
          <a class="xref" href="connectors-apis.html#mysql-info" title="27.7.6.36 mysql_info()">Section 27.7.6.36, “mysql_info()”</a>, and
          <a class="xref" href="sql-statements.html#show-warnings" title="13.7.5.40 SHOW WARNINGS Statement">Section 13.7.5.40, “SHOW WARNINGS Statement”</a>.
        </p><p>
          <code class="literal">InnoDB</code> and <code class="literal">NDB</code> tables
          support foreign keys. See
          <a class="xref" href="introduction.html#constraint-foreign-key" title="1.8.3.2 FOREIGN KEY Constraints">Section 1.8.3.2, “FOREIGN KEY Constraints”</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-foreign-key"></a>1.8.3.2 FOREIGN KEY Constraints</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428188304"></a><p>
          Foreign keys let you cross-reference related data across
          tables, and
          <a class="link" href="glossary.html#glos_foreign_key_constraint" title="FOREIGN KEY constraint">foreign key
          constraints</a> help keep this spread-out data consistent.
        </p><p>
          MySQL supports <code class="literal">ON UPDATE</code> and <code class="literal">ON
          DELETE</code> foreign key references in
          <a class="link" href="sql-statements.html#create-table" title="13.1.18 CREATE TABLE Statement"><code class="literal">CREATE TABLE</code></a> and
          <a class="link" href="sql-statements.html#alter-table" title="13.1.8 ALTER TABLE Statement"><code class="literal">ALTER TABLE</code></a> statements. The
          available referential actions are <code class="literal">RESTRICT</code>
          (the default), <code class="literal">CASCADE</code>, <code class="literal">SET
          NULL</code>, and <code class="literal">NO ACTION</code>.
        </p><p>
          <code class="literal">SET DEFAULT</code> is also supported by the MySQL
          Server but is currently rejected as invalid by
          <a class="link" href="innodb-storage-engine.html" title="Chapter 14 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a>. Since MySQL does not
          support deferred constraint checking, <code class="literal">NO
          ACTION</code> is treated as <code class="literal">RESTRICT</code>.
          For the exact syntax supported by MySQL for foreign keys, see
          <a class="xref" href="sql-statements.html#create-table-foreign-keys" title="13.1.18.5 FOREIGN KEY Constraints">Section 13.1.18.5, “FOREIGN KEY Constraints”</a>.
        </p><p>
          <code class="literal">MATCH FULL</code>, <code class="literal">MATCH
          PARTIAL</code>, and <code class="literal">MATCH SIMPLE</code> are
          allowed, but their use should be avoided, as they cause the
          MySQL Server to ignore any <code class="literal">ON DELETE</code> or
          <code class="literal">ON UPDATE</code> clause used in the same
          statement. <code class="literal">MATCH</code> options do not have any
          other effect in MySQL, which in effect enforces <code class="literal">MATCH
          SIMPLE</code> semantics full-time.
        </p><p>
          MySQL requires that foreign key columns be indexed; if you
          create a table with a foreign key constraint but no index on a
          given column, an index is created.
        </p><p>
          You can obtain information about foreign keys from the
          <a class="link" href="information-schema.html#key-column-usage-table" title="24.12 The INFORMATION_SCHEMA KEY_COLUMN_USAGE Table"><code class="literal">INFORMATION_SCHEMA.KEY_COLUMN_USAGE</code></a>
          table. An example of a query against this table is shown here:
        </p><pre data-lang="sql" class="programlisting">mysql&gt; <strong class="userinput"><code>SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME</code></strong>
     &gt; <strong class="userinput"><code>FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE</code></strong>
     &gt; <strong class="userinput"><code>WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;</code></strong>
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME    | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1          | myuser        | myuser_id   | f               |
| fk1          | product_order | customer_id | f2              |
| fk1          | product_order | product_id  | f1              |
+--------------+---------------+-------------+-----------------+
3 rows in set (0.01 sec)
</pre><p>
          Information about foreign keys on <code class="literal">InnoDB</code>
          tables can also be found in the
          <a class="link" href="information-schema.html#innodb-sys-foreign-table" title="24.32.19 The INFORMATION_SCHEMA INNODB_SYS_FOREIGN Table"><code class="literal">INNODB_SYS_FOREIGN</code></a> and
          <a class="link" href="information-schema.html#innodb-sys-foreign-cols-table" title="24.32.20 The INFORMATION_SCHEMA INNODB_SYS_FOREIGN_COLS Table"><code class="literal">INNODB_SYS_FOREIGN_COLS</code></a> tables,
          in the <code class="literal">INFORMATION_SCHEMA</code> database.
        </p><p>
          <code class="literal">InnoDB</code> and <code class="literal">NDB</code> tables
          support foreign keys.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-invalid-data"></a>1.8.3.3 Constraints on Invalid Data</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm46734428153664"></a><a class="indexterm" name="idm46734428152208"></a><a class="indexterm" name="idm46734428150720"></a><a class="indexterm" name="idm46734428149232"></a><a class="indexterm" name="idm46734428147744"></a><p>
          MySQL 5.7.5 and later uses strict SQL mode by default, which
          treats invalid values such that the server rejects them and
          aborts the statement in which they occur (see
          <a class="xref" href="server-administration.html#sql-mode" title="5.1.10 Server SQL Modes">Section 5.1.10, “Server SQL Modes”</a>). Previously, MySQL was much more
          forgiving of incorrect values used in data entry; this now
          requires disabling of strict mode, which is not recommended.
          The remainder of this section discusses the old behavior
          followed by MySQL when strict mode has been disabled.
        </p><p>
          If you are not using strict mode, then whenever you insert an
          <span class="quote">“<span class="quote">incorrect</span>”</span> value into a column, such as a
          <code class="literal">NULL</code> into a <code class="literal">NOT NULL</code>
          column or a too-large numeric value into a numeric column,
          MySQL sets the column to the <span class="quote">“<span class="quote">best possible
          value</span>”</span> instead of producing an error: The following
          rules describe in more detail how this works:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              If you try to store an out of range value into a numeric
              column, MySQL Server instead stores zero, the smallest
              possible value, or the largest possible value, whichever
              is closest to the invalid value.
            </p></li><li class="listitem"><p>
              For strings, MySQL stores either the empty string or as
              much of the string as can be stored in the column.
            </p></li><li class="listitem"><p>
              If you try to store a string that does not start with a
              number into a numeric column, MySQL Server stores 0.
            </p></li><li class="listitem"><p>
              Invalid values for <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a> and
              <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a> columns are handled as
              described in <a class="xref" href="introduction.html#constraint-enum" title="1.8.3.4 ENUM and SET Constraints">Section 1.8.3.4, “ENUM and SET Constraints”</a>.
            </p></li><li class="listitem"><p>
              MySQL permits you to store certain incorrect date values
              into <a class="link" href="data-types.html#datetime" title="11.2.2 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATE</code></a> and
              <a class="link" href="data-types.html#datetime" title="11.2.2 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATETIME</code></a> columns (such as
              <code class="literal">'2000-02-31'</code> or
              <code class="literal">'2000-02-00'</code>). In this case, when an
              application has not enabled strict SQL mode, it up to the
              application to validate the dates before storing them. If
              MySQL can store a date value and retrieve exactly the same
              value, MySQL stores it as given. If the date is totally
              wrong (outside the server's ability to store it), the
              special <span class="quote">“<span class="quote">zero</span>”</span> date value
              <code class="literal">'0000-00-00'</code> is stored in the column
              instead.
            </p></li><li class="listitem"><p>
              If you try to store <code class="literal">NULL</code> into a column
              that doesn't take <code class="literal">NULL</code> values, an error
              occurs for single-row
              <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a> statements. For
              multiple-row <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a>
              statements or for
              <a class="link" href="sql-statements.html#insert-select" title="13.2.5.1 INSERT ... SELECT Statement"><code class="literal">INSERT INTO
              ... SELECT</code></a> statements, MySQL Server stores the
              implicit default value for the column data type. In
              general, this is <code class="literal">0</code> for numeric types,
              the empty string (<code class="literal">''</code>) for string types,
              and the <span class="quote">“<span class="quote">zero</span>”</span> value for date and time types.
              Implicit default values are discussed in
              <a class="xref" href="data-types.html#data-type-defaults" title="11.6 Data Type Default Values">Section 11.6, “Data Type Default Values”</a>.
            </p></li><li class="listitem"><p>
              If an <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a> statement
              specifies no value for a column, MySQL inserts its default
              value if the column definition includes an explicit
              <code class="literal">DEFAULT</code> clause. If the definition has
              no such <code class="literal">DEFAULT</code> clause, MySQL inserts
              the implicit default value for the column data type.
</p></li></ul>
</div>
<p>
          The reason for using the preceding rules when strict mode is
          not in effect is that we cannot check these conditions until
          the statement has begun executing. We cannot just roll back if
          we encounter a problem after updating a few rows, because the
          storage engine may not support rollback. The option of
          terminating the statement is not that good; in this case, the
          update would be <span class="quote">“<span class="quote">half done,</span>”</span> which is probably
          the worst possible scenario. In this case, it is better to
          <span class="quote">“<span class="quote">do the best you can</span>”</span> and then continue as if
          nothing happened.
        </p><p>
          You can select stricter treatment of input values by using the
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> or
          <a class="link" href="server-administration.html#sqlmode_strict_all_tables"><code class="literal">STRICT_ALL_TABLES</code></a> SQL modes:
        </p><pre data-lang="sql" class="programlisting">SET sql_mode = 'STRICT_TRANS_TABLES';
SET sql_mode = 'STRICT_ALL_TABLES';</pre><p>
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> enables
          strict mode for transactional storage engines, and also to
          some extent for nontransactional engines. It works like this:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              For transactional storage engines, bad data values
              occurring anywhere in a statement cause the statement to
              abort and roll back.
            </p></li><li class="listitem"><p>
              For nontransactional storage engines, a statement aborts
              if the error occurs in the first row to be inserted or
              updated. (When the error occurs in the first row, the
              statement can be aborted to leave the table unchanged,
              just as for a transactional table.) Errors in rows after
              the first do not abort the statement, because the table
              has already been changed by the first row. Instead, bad
              data values are adjusted and result in warnings rather
              than errors. In other words, with
              <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a>, a
              wrong value causes MySQL to roll back all updates done so
              far, if that can be done without changing the table. But
              once the table has been changed, further errors result in
              adjustments and warnings.
</p></li></ul>
</div>
<p>
          For even stricter checking, enable
          <a class="link" href="server-administration.html#sqlmode_strict_all_tables"><code class="literal">STRICT_ALL_TABLES</code></a>. This is
          the same as
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> except
          that for nontransactional storage engines, errors abort the
          statement even for bad data in rows following the first row.
          This means that if an error occurs partway through a
          multiple-row insert or update for a nontransactional table, a
          partial update results. Earlier rows are inserted or updated,
          but those from the point of the error on are not. To avoid
          this for nontransactional tables, either use single-row
          statements or else use
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> if
          conversion warnings rather than errors are acceptable. To
          avoid problems in the first place, do not use MySQL to check
          column content. It is safest (and often faster) to let the
          application ensure that it passes only valid values to the
          database.
        </p><p>
          With either of the strict mode options, you can cause errors
          to be treated as warnings by using
          <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT
          IGNORE</code></a> or <code class="literal">UPDATE IGNORE</code> rather
          than <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT</code></a> or
          <a class="link" href="sql-statements.html#update" title="13.2.11 UPDATE Statement"><code class="literal">UPDATE</code></a> without
          <code class="literal">IGNORE</code>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-enum"></a>1.8.3.4 ENUM and SET Constraints</h4>

</div>

</div>

</div>
<p>
          <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a> and
          <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a> columns provide an
          efficient way to define columns that can contain only a given
          set of values. See <a class="xref" href="data-types.html#enum" title="11.3.5 The ENUM Type">Section 11.3.5, “The ENUM Type”</a>, and
          <a class="xref" href="data-types.html#set" title="11.3.6 The SET Type">Section 11.3.6, “The SET Type”</a>.
        </p><p>
          Unless strict mode is disabled (not recommended, but see
          <a class="xref" href="server-administration.html#sql-mode" title="5.1.10 Server SQL Modes">Section 5.1.10, “Server SQL Modes”</a>), the definition of a
          <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a> or
          <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a> column acts as a constraint
          on values entered into the column. An error occurs for values
          that do not satisfy these conditions:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              An <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a> value must be one
              of those listed in the column definition, or the internal
              numeric equivalent thereof. The value cannot be the error
              value (that is, 0 or the empty string). For a column
              defined as
              <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM('a','b','c')</code></a>, values
              such as <code class="literal">''</code>, <code class="literal">'d'</code>, or
              <code class="literal">'ax'</code> are invalid and are rejected.
            </p></li><li class="listitem"><p>
              A <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a> value must be the
              empty string or a value consisting only of the values
              listed in the column definition separated by commas. For a
              column defined as
              <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET('a','b','c')</code></a>, values
              such as <code class="literal">'d'</code> or
              <code class="literal">'a,b,c,d'</code> are invalid and are rejected.
</p></li></ul>
</div>
<p>
          Errors for invalid values can be suppressed in strict mode if
          you use <a class="link" href="sql-statements.html#insert" title="13.2.5 INSERT Statement"><code class="literal">INSERT
          IGNORE</code></a> or <code class="literal">UPDATE IGNORE</code>. In this
          case, a warning is generated rather than an error. For
          <a class="link" href="data-types.html#enum" title="11.3.5 The ENUM Type"><code class="literal">ENUM</code></a>, the value is inserted as
          the error member (<code class="literal">0</code>). For
          <a class="link" href="data-types.html#set" title="11.3.6 The SET Type"><code class="literal">SET</code></a>, the value is inserted as
          given except that any invalid substrings are deleted. For
          example, <code class="literal">'a,x,b,y'</code> results in a value of
          <code class="literal">'a,b'</code>.
</p>
</div>

</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="credits"></a>1.9 Credits</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#contributors">1.9.1 Contributors to MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#documenters-translators">1.9.2 Documenters and translators</a></span></dt><dt><span class="section"><a href="introduction.html#packages">1.9.3 Packages that support MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#tools-used-to-create-mysql">1.9.4 Tools that were used to create MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#supporters">1.9.5 Supporters of MySQL</a></span></dt></dl>
</div>
<p>
    The following sections list developers, contributors, and supporters
    that have helped to make MySQL what it is today.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="contributors"></a>1.9.1 Contributors to MySQL</h3>
</div>
</div>
</div>
<a class="indexterm" name="idm46734428061952"></a><p>
      Although Oracle Corporation and/or its affiliates own all
      copyrights in the <code class="literal">MySQL server</code> and the
      <code class="literal">MySQL manual</code>, we wish to recognize those who
      have made contributions of one kind or another to the
      <code class="literal">MySQL distribution</code>. Contributors are listed
      here, in somewhat random order:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Gianmassimo Vigazzola <code class="email">&lt;<a class="email" href="mailto:qwerg@mbox.vol.it">qwerg@mbox.vol.it</a>&gt;</code> or
          <code class="email">&lt;<a class="email" href="mailto:qwerg@tin.it">qwerg@tin.it</a>&gt;</code>
        </p><p>
          The initial port to Win32/NT.
        </p></li><li class="listitem"><p>
          Per Eric Olsson
        </p><p>
          For constructive criticism and real testing of the dynamic
          record format.
        </p></li><li class="listitem"><p>
          Irena Pancirov <code class="email">&lt;<a class="email" href="mailto:irena@mail.yacc.it">irena@mail.yacc.it</a>&gt;</code>
        </p><p>
          Win32 port with Borland compiler.
          <code class="literal">mysqlshutdown.exe</code> and
          <code class="literal">mysqlwatch.exe</code>.
        </p></li><li class="listitem"><p>
          David J. Hughes
        </p><p>
          For the effort to make a shareware SQL database. At TcX, the
          predecessor of MySQL AB, we started with
          <code class="literal">mSQL</code>, but found that it couldn't satisfy
          our purposes so instead we wrote an SQL interface to our
          application builder Unireg. <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin</strong></span></a> and
          <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Client"><span class="command"><strong>mysql</strong></span></a> client are programs that were largely
          influenced by their <code class="literal">mSQL</code> counterparts. We
          have put a lot of effort into making the MySQL syntax a
          superset of <code class="literal">mSQL</code>. Many of the API's ideas
          are borrowed from <code class="literal">mSQL</code> to make it easy to
          port free <code class="literal">mSQL</code> programs to the MySQL API.
          The MySQL software doesn't contain any code from
          <code class="literal">mSQL</code>. Two files in the distribution
          (<code class="filename">client/insert_test.c</code> and
          <code class="filename">client/select_test.c</code>) are based on the
          corresponding (noncopyrighted) files in the
          <code class="literal">mSQL</code> distribution, but are modified as
          examples showing the changes necessary to convert code from
          <code class="literal">mSQL</code> to MySQL Server.
          (<code class="literal">mSQL</code> is copyrighted David J. Hughes.)
        </p></li><li class="listitem"><p>
          Patrick Lynch
        </p><p>
          For helping us acquire <a class="ulink" href="http://www.mysql.com/" target="_top">http://www.mysql.com/</a>.
        </p></li><li class="listitem"><p>
          Fred Lindberg
        </p><p>
          For setting up qmail to handle the MySQL mailing list and for
          the incredible help we got in managing the MySQL mailing
          lists.
        </p></li><li class="listitem"><p>
          Igor Romanenko <code class="email">&lt;<a class="email" href="mailto:igor@frog.kiev.ua">igor@frog.kiev.ua</a>&gt;</code>
        </p><p>
          <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> (previously
          <code class="literal">msqldump</code>, but ported and enhanced by
          Monty).
        </p></li><li class="listitem"><p>
          Yuri Dario
        </p><p>
          For keeping up and extending the MySQL OS/2 port.
        </p></li><li class="listitem"><p>
          Tim Bunce
        </p><p>
          Author of <span class="command"><strong>mysqlhotcopy</strong></span>.
        </p></li><li class="listitem"><p>
          Zarko Mocnik <code class="email">&lt;<a class="email" href="mailto:zarko.mocnik@dem.si">zarko.mocnik@dem.si</a>&gt;</code>
        </p><p>
          Sorting for Slovenian language.
        </p></li><li class="listitem"><p>
          "TAMITO" <code class="email">&lt;<a class="email" href="mailto:tommy@valley.ne.jp">tommy@valley.ne.jp</a>&gt;</code>
        </p><p>
          The <code class="literal">_MB</code> character set macros and the ujis
          and sjis character sets.
        </p></li><li class="listitem"><p>
          Joshua Chamas <code class="email">&lt;<a class="email" href="mailto:joshua@chamas.com">joshua@chamas.com</a>&gt;</code>
        </p><p>
          Base for concurrent insert, extended date syntax, debugging on
          NT, and answering on the MySQL mailing list.
        </p></li><li class="listitem"><p>
          Yves Carlier <code class="email">&lt;<a class="email" href="mailto:Yves.Carlier@rug.ac.be">Yves.Carlier@rug.ac.be</a>&gt;</code>
        </p><p>
          <span class="command"><strong>mysqlaccess</strong></span>, a program to show the access
          rights for a user.
        </p></li><li class="listitem"><p>
          Rhys Jones <code class="email">&lt;<a class="email" href="mailto:rhys@wales.com">rhys@wales.com</a>&gt;</code> (And GWE Technologies
          Limited)
        </p><p>
          For one of the early JDBC drivers.
        </p></li><li class="listitem"><p>
          Dr Xiaokun Kelvin ZHU <code class="email">&lt;<a class="email" href="mailto:X.Zhu@brad.ac.uk">X.Zhu@brad.ac.uk</a>&gt;</code>
        </p><p>
          Further development of one of the early JDBC drivers and other
          MySQL-related Java tools.
        </p></li><li class="listitem"><p>
          James Cooper <code class="email">&lt;<a class="email" href="mailto:pixel@organic.com">pixel@organic.com</a>&gt;</code>
        </p><p>
          For setting up a searchable mailing list archive at his site.
        </p></li><li class="listitem"><p>
          Rick Mehalick <code class="email">&lt;<a class="email" href="mailto:Rick_Mehalick@i-o.com">Rick_Mehalick@i-o.com</a>&gt;</code>
        </p><p>
          For <code class="literal">xmysql</code>, a graphical X client for MySQL
          Server.
        </p></li><li class="listitem"><p>
          Doug Sisk <code class="email">&lt;<a class="email" href="mailto:sisk@wix.com">sisk@wix.com</a>&gt;</code>
        </p><p>
          For providing RPM packages of MySQL for Red Hat Linux.
        </p></li><li class="listitem"><p>
          Diemand Alexander V. <code class="email">&lt;<a class="email" href="mailto:axeld@vial.ethz.ch">axeld@vial.ethz.ch</a>&gt;</code>
        </p><p>
          For providing RPM packages of MySQL for Red Hat Linux-Alpha.
        </p></li><li class="listitem"><p>
          Antoni Pamies Olive <code class="email">&lt;<a class="email" href="mailto:toni@readysoft.es">toni@readysoft.es</a>&gt;</code>
        </p><p>
          For providing RPM versions of a lot of MySQL clients for Intel
          and SPARC.
        </p></li><li class="listitem"><p>
          Jay Bloodworth <code class="email">&lt;<a class="email" href="mailto:jay@pathways.sde.state.sc.us">jay@pathways.sde.state.sc.us</a>&gt;</code>
        </p><p>
          For providing RPM versions for MySQL 3.21.
        </p></li><li class="listitem"><p>
          David Sacerdote <code class="email">&lt;<a class="email" href="mailto:davids@secnet.com">davids@secnet.com</a>&gt;</code>
        </p><p>
          Ideas for secure checking of DNS host names.
        </p></li><li class="listitem"><p>
          Wei-Jou Chen <code class="email">&lt;<a class="email" href="mailto:jou@nematic.ieo.nctu.edu.tw">jou@nematic.ieo.nctu.edu.tw</a>&gt;</code>
        </p><p>
          Some support for Chinese(BIG5) characters.
        </p></li><li class="listitem"><p>
          Wei He <code class="email">&lt;<a class="email" href="mailto:hewei@mail.ied.ac.cn">hewei@mail.ied.ac.cn</a>&gt;</code>
        </p><p>
          A lot of functionality for the Chinese(GBK) character set.
        </p></li><li class="listitem"><p>
          Jan Pazdziora <code class="email">&lt;<a class="email" href="mailto:adelton@fi.muni.cz">adelton@fi.muni.cz</a>&gt;</code>
        </p><p>
          Czech sorting order.
        </p></li><li class="listitem"><p>
          Zeev Suraski <code class="email">&lt;<a class="email" href="mailto:bourbon@netvision.net.il">bourbon@netvision.net.il</a>&gt;</code>
        </p><p>
          <code class="literal">FROM_UNIXTIME()</code> time formatting,
          <code class="literal">ENCRYPT()</code> functions, and
          <span class="command"><strong>bison</strong></span> advisor. Active mailing list member.
        </p></li><li class="listitem"><p>
          Luuk de Boer <code class="email">&lt;<a class="email" href="mailto:luuk@wxs.nl">luuk@wxs.nl</a>&gt;</code>
        </p><p>
          Ported (and extended) the benchmark suite to
          <code class="literal">DBI</code>/<code class="literal">DBD</code>. Have been of
          great help with <code class="literal">crash-me</code> and running
          benchmarks. Some new date functions. The
          <span class="command"><strong>mysql_setpermission</strong></span> script.
        </p></li><li class="listitem"><p>
          Alexis Mikhailov <code class="email">&lt;<a class="email" href="mailto:root@medinf.chuvashia.su">root@medinf.chuvashia.su</a>&gt;</code>
        </p><p>
          User-defined functions (UDFs); <a class="link" href="sql-statements.html#create-function" title="13.1.13 CREATE FUNCTION Statement"><code class="literal">CREATE
          FUNCTION</code></a> and <a class="link" href="sql-statements.html#drop-function" title="13.1.24 DROP FUNCTION Statement"><code class="literal">DROP
          FUNCTION</code></a>.
        </p></li><li class="listitem"><p>
          Andreas F. Bobak <code class="email">&lt;<a class="email" href="mailto:bobak@relog.ch">bobak@relog.ch</a>&gt;</code>
        </p><p>
          The <code class="literal">AGGREGATE</code> extension to user-defined
          functions.
        </p></li><li class="listitem"><p>
          Ross Wakelin <code class="email">&lt;<a class="email" href="mailto:R.Wakelin@march.co.uk">R.Wakelin@march.co.uk</a>&gt;</code>
        </p><p>
          Help to set up InstallShield for MySQL-Win32.
        </p></li><li class="listitem"><p>
          Jethro Wright III <code class="email">&lt;<a class="email" href="mailto:jetman@li.net">jetman@li.net</a>&gt;</code>
        </p><p>
          The <code class="filename">libmysql.dll</code> library.
        </p></li><li class="listitem"><p>
          James Pereria <code class="email">&lt;<a class="email" href="mailto:jpereira@iafrica.com">jpereira@iafrica.com</a>&gt;</code>
        </p><p>
          Mysqlmanager, a Win32 GUI tool for administering MySQL
          Servers.
        </p></li><li class="listitem"><p>
          Curt Sampson <code class="email">&lt;<a class="email" href="mailto:cjs@portal.ca">cjs@portal.ca</a>&gt;</code>
        </p><p>
          Porting of MIT-pthreads to NetBSD/Alpha and NetBSD 1.3/i386.
        </p></li><li class="listitem"><p>
          Martin Ramsch <code class="email">&lt;<a class="email" href="mailto:m.ramsch@computer.org">m.ramsch@computer.org</a>&gt;</code>
        </p><p>
          Examples in the MySQL Tutorial.
        </p></li><li class="listitem"><p>
          Steve Harvey
        </p><p>
          For making <span class="command"><strong>mysqlaccess</strong></span> more secure.
        </p></li><li class="listitem"><p>
          Konark IA-64 Centre of Persistent Systems Private Limited
        </p><p>
          Help with the Win64 port of the MySQL server.
        </p></li><li class="listitem"><p>
          Albert Chin-A-Young.
        </p><p>
          Configure updates for Tru64, large file support and better TCP
          wrappers support.
        </p></li><li class="listitem"><p>
          John Birrell
        </p><p>
          Emulation of <code class="function">pthread_mutex()</code> for OS/2.
        </p></li><li class="listitem"><p>
          Benjamin Pflugmann
        </p><p>
          Extended <code class="literal">MERGE</code> tables to handle
          <code class="literal">INSERTS</code>. Active member on the MySQL mailing
          lists.
        </p></li><li class="listitem"><p>
          Jocelyn Fournier
        </p><p>
          Excellent spotting and reporting innumerable bugs (especially
          in the MySQL 4.1 subquery code).
        </p></li><li class="listitem"><p>
          Marc Liyanage
        </p><p>
          Maintaining the OS X packages and providing invaluable
          feedback on how to create OS X packages.
        </p></li><li class="listitem"><p>
          Robert Rutherford
        </p><p>
          Providing invaluable information and feedback about the QNX
          port.
        </p></li><li class="listitem"><p>
          Previous developers of NDB Cluster
        </p><p>
          Lots of people were involved in various ways summer students,
          master thesis students, employees. In total more than 100
          people so too many to mention here. Notable name is Ataullah
          Dabaghi who up until 1999 contributed around a third of the
          code base. A special thanks also to developers of the AXE
          system which provided much of the architectural foundations
          for NDB Cluster with blocks, signals and crash tracing
          functionality. Also credit should be given to those who
          believed in the ideas enough to allocate of their budgets for
          its development from 1992 to present time.
        </p></li><li class="listitem"><p>
          Google Inc.
        </p><p>
          We wish to recognize Google Inc. for contributions to the
          MySQL distribution: Mark Callaghan's SMP Performance patches
          and other patches.
</p></li></ul>
</div>
<p>
      Other contributors, bugfinders, and testers: James H. Thompson,
      Maurizio Menghini, Wojciech Tryc, Luca Berra, Zarko Mocnik, Wim
      Bonis, Elmar Haneke, <code class="email">&lt;<a class="email" href="mailto:jehamby@lightside">jehamby@lightside</a>&gt;</code>,
      <code class="email">&lt;<a class="email" href="mailto:psmith@BayNetworks.com">psmith@BayNetworks.com</a>&gt;</code>,
      <code class="email">&lt;<a class="email" href="mailto:duane@connect.com.au">duane@connect.com.au</a>&gt;</code>, Ted Deppner
      <code class="email">&lt;<a class="email" href="mailto:ted@psyber.com">ted@psyber.com</a>&gt;</code>, Mike Simons, Jaakko Hyvatti.
    </p><p>
      And lots of bug report/patches from the folks on the mailing list.
    </p><p>
      A big tribute goes to those that help us answer questions on the
      MySQL mailing lists:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Daniel Koch <code class="email">&lt;<a class="email" href="mailto:dkoch@amcity.com">dkoch@amcity.com</a>&gt;</code>
        </p><p>
          Irix setup.
        </p></li><li class="listitem"><p>
          Luuk de Boer <code class="email">&lt;<a class="email" href="mailto:luuk@wxs.nl">luuk@wxs.nl</a>&gt;</code>
        </p><p>
          Benchmark questions.
        </p></li><li class="listitem"><p>
          Tim Sailer <code class="email">&lt;<a class="email" href="mailto:tps@users.buoy.com">tps@users.buoy.com</a>&gt;</code>
        </p><p>
          <code class="literal">DBD::mysql</code> questions.
        </p></li><li class="listitem"><p>
          Boyd Lynn Gerber <code class="email">&lt;<a class="email" href="mailto:gerberb@zenez.com">gerberb@zenez.com</a>&gt;</code>
        </p><p>
          SCO-related questions.
        </p></li><li class="listitem"><p>
          Richard Mehalick <code class="email">&lt;<a class="email" href="mailto:RM186061@shellus.com">RM186061@shellus.com</a>&gt;</code>
        </p><p>
          <code class="literal">xmysql</code>-related questions and basic
          installation questions.
        </p></li><li class="listitem"><p>
          Zeev Suraski <code class="email">&lt;<a class="email" href="mailto:bourbon@netvision.net.il">bourbon@netvision.net.il</a>&gt;</code>
        </p><p>
          Apache module configuration questions (log &amp; auth),
          PHP-related questions, SQL syntax-related questions and other
          general questions.
        </p></li><li class="listitem"><p>
          Francesc Guasch <code class="email">&lt;<a class="email" href="mailto:frankie@citel.upc.es">frankie@citel.upc.es</a>&gt;</code>
        </p><p>
          General questions.
        </p></li><li class="listitem"><p>
          Jonathan J Smith <code class="email">&lt;<a class="email" href="mailto:jsmith@wtp.net">jsmith@wtp.net</a>&gt;</code>
        </p><p>
          Questions pertaining to OS-specifics with Linux, SQL syntax,
          and other things that might need some work.
        </p></li><li class="listitem"><p>
          David Sklar <code class="email">&lt;<a class="email" href="mailto:sklar@student.net">sklar@student.net</a>&gt;</code>
        </p><p>
          Using MySQL from PHP and Perl.
        </p></li><li class="listitem"><p>
          Alistair MacDonald <code class="email">&lt;<a class="email" href="mailto:A.MacDonald@uel.ac.uk">A.MacDonald@uel.ac.uk</a>&gt;</code>
        </p><p>
          Is flexible and can handle Linux and perhaps HP-UX.
        </p></li><li class="listitem"><p>
          John Lyon <code class="email">&lt;<a class="email" href="mailto:jlyon@imag.net">jlyon@imag.net</a>&gt;</code>
        </p><p>
          Questions about installing MySQL on Linux systems, using
          either <code class="filename">.rpm</code> files or compiling from
          source.
        </p></li><li class="listitem"><p>
          Lorvid Ltd. <code class="email">&lt;<a class="email" href="mailto:lorvid@WOLFENET.com">lorvid@WOLFENET.com</a>&gt;</code>
        </p><p>
          Simple billing/license/support/copyright issues.
        </p></li><li class="listitem"><p>
          Patrick Sherrill <code class="email">&lt;<a class="email" href="mailto:patrick@coconet.com">patrick@coconet.com</a>&gt;</code>
        </p><p>
          ODBC and VisualC++ interface questions.
        </p></li><li class="listitem"><p>
          Randy Harmon <code class="email">&lt;<a class="email" href="mailto:rjharmon@uptimecomputers.com">rjharmon@uptimecomputers.com</a>&gt;</code>
        </p><p>
          <code class="literal">DBD</code>, Linux, some SQL syntax questions.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="documenters-translators"></a>1.9.2 Documenters and translators</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734427925888"></a><a class="indexterm" name="idm46734427924432"></a><p>
      The following people have helped us with writing the MySQL
      documentation and translating the documentation or error messages
      in MySQL.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Paul DuBois
        </p><p>
          Ongoing help with making this manual correct and
          understandable. That includes rewriting Monty's and David's
          attempts at English into English as other people know it.
        </p></li><li class="listitem"><p>
          Kim Aldale
        </p><p>
          Helped to rewrite Monty's and David's early attempts at
          English into English.
        </p></li><li class="listitem"><p>
          Michael J. Miller Jr.
          <code class="email">&lt;<a class="email" href="mailto:mke@terrapin.turbolift.com">mke@terrapin.turbolift.com</a>&gt;</code>
        </p><p>
          For the first MySQL manual. And a lot of spelling/language
          fixes for the FAQ (that turned into the MySQL manual a long
          time ago).
        </p></li><li class="listitem"><p>
          Yan Cailin
        </p><p>
          First translator of the MySQL Reference Manual into simplified
          Chinese in early 2000 on which the Big5 and HK coded versions
          were based.
        </p></li><li class="listitem"><p>
          Jay Flaherty <code class="email">&lt;<a class="email" href="mailto:fty@mediapulse.com">fty@mediapulse.com</a>&gt;</code>
        </p><p>
          Big parts of the Perl
          <code class="literal">DBI</code>/<code class="literal">DBD</code> section in the
          manual.
        </p></li><li class="listitem"><p>
          Paul Southworth <code class="email">&lt;<a class="email" href="mailto:pauls@etext.org">pauls@etext.org</a>&gt;</code>, Ray Loyzaga
          <code class="email">&lt;<a class="email" href="mailto:yar@cs.su.oz.au">yar@cs.su.oz.au</a>&gt;</code>
        </p><p>
          Proof-reading of the Reference Manual.
        </p></li><li class="listitem"><p>
          Therrien Gilbert <code class="email">&lt;<a class="email" href="mailto:gilbert@ican.net">gilbert@ican.net</a>&gt;</code>, Jean-Marc
          Pouyot <code class="email">&lt;<a class="email" href="mailto:jmp@scalaire.fr">jmp@scalaire.fr</a>&gt;</code>
        </p><p>
          French error messages.
        </p></li><li class="listitem"><p>
          Petr Snajdr, <code class="email">&lt;<a class="email" href="mailto:snajdr@pvt.net">snajdr@pvt.net</a>&gt;</code>
        </p><p>
          Czech error messages.
        </p></li><li class="listitem"><p>
          Jaroslaw Lewandowski <code class="email">&lt;<a class="email" href="mailto:jotel@itnet.com.pl">jotel@itnet.com.pl</a>&gt;</code>
        </p><p>
          Polish error messages.
        </p></li><li class="listitem"><p>
          Miguel Angel Fernandez Roiz
        </p><p>
          Spanish error messages.
        </p></li><li class="listitem"><p>
          Roy-Magne Mo <code class="email">&lt;<a class="email" href="mailto:rmo@www.hivolda.no">rmo@www.hivolda.no</a>&gt;</code>
        </p><p>
          Norwegian error messages and testing of MySQL 3.21.xx.
        </p></li><li class="listitem"><p>
          Timur I. Bakeyev <code class="email">&lt;<a class="email" href="mailto:root@timur.tatarstan.ru">root@timur.tatarstan.ru</a>&gt;</code>
        </p><p>
          Russian error messages.
        </p></li><li class="listitem"><p>
          <code class="email">&lt;<a class="email" href="mailto:brenno@dewinter.com">brenno@dewinter.com</a>&gt;</code> &amp; Filippo Grassilli
          <code class="email">&lt;<a class="email" href="mailto:phil@hyppo.com">phil@hyppo.com</a>&gt;</code>
        </p><p>
          Italian error messages.
        </p></li><li class="listitem"><p>
          Dirk Munzinger <code class="email">&lt;<a class="email" href="mailto:dirk@trinity.saar.de">dirk@trinity.saar.de</a>&gt;</code>
        </p><p>
          German error messages.
        </p></li><li class="listitem"><p>
          Billik Stefan <code class="email">&lt;<a class="email" href="mailto:billik@sun.uniag.sk">billik@sun.uniag.sk</a>&gt;</code>
        </p><p>
          Slovak error messages.
        </p></li><li class="listitem"><p>
          Stefan Saroiu <code class="email">&lt;<a class="email" href="mailto:tzoompy@cs.washington.edu">tzoompy@cs.washington.edu</a>&gt;</code>
        </p><p>
          Romanian error messages.
        </p></li><li class="listitem"><p>
          Peter Feher
        </p><p>
          Hungarian error messages.
        </p></li><li class="listitem"><p>
          Roberto M. Serqueira
        </p><p>
          Portuguese error messages.
        </p></li><li class="listitem"><p>
          Carsten H. Pedersen
        </p><p>
          Danish error messages.
        </p></li><li class="listitem"><p>
          Arjen Lentz
        </p><p>
          Dutch error messages, completing earlier partial translation
          (also work on consistency and spelling).
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="packages"></a>1.9.3 Packages that support MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734427887072"></a><a class="indexterm" name="idm46734427885616"></a><p>
      The following is a list of creators/maintainers of some of the
      most important API/packages/applications that a lot of people use
      with MySQL.
    </p><p>
      We cannot list every possible package here because the list would
      then be way to hard to maintain. For other packages, please refer
      to the software portal at
      <a class="ulink" href="http://solutions.mysql.com/software/" target="_top">http://solutions.mysql.com/software/</a>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Tim Bunce, Alligator Descartes
        </p><p>
          For the <code class="literal">DBD</code> (Perl) interface.
        </p></li><li class="listitem"><p>
          Andreas Koenig <code class="email">&lt;<a class="email" href="mailto:a.koenig@mind.de">a.koenig@mind.de</a>&gt;</code>
        </p><p>
          For the Perl interface for MySQL Server.
        </p></li><li class="listitem"><p>
          Jochen Wiedmann <code class="email">&lt;<a class="email" href="mailto:wiedmann@neckar-alb.de">wiedmann@neckar-alb.de</a>&gt;</code>
        </p><p>
          For maintaining the Perl <code class="literal">DBD::mysql</code> module.
        </p></li><li class="listitem"><p>
          Eugene Chan <code class="email">&lt;<a class="email" href="mailto:eugene@acenet.com.sg">eugene@acenet.com.sg</a>&gt;</code>
        </p><p>
          For porting PHP for MySQL Server.
        </p></li><li class="listitem"><p>
          Georg Richter
        </p><p>
          MySQL 4.1 testing and bug hunting. New PHP 5.0
          <code class="literal">mysqli</code> extension (API) for use with MySQL
          4.1 and up.
        </p></li><li class="listitem"><p>
          Giovanni Maruzzelli <code class="email">&lt;<a class="email" href="mailto:maruzz@matrice.it">maruzz@matrice.it</a>&gt;</code>
        </p><p>
          For porting iODBC (Unix ODBC).
        </p></li><li class="listitem"><p>
          Xavier Leroy <code class="email">&lt;<a class="email" href="mailto:Xavier.Leroy@inria.fr">Xavier.Leroy@inria.fr</a>&gt;</code>
        </p><p>
          The author of LinuxThreads (used by the MySQL Server on
          Linux).
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="tools-used-to-create-mysql"></a>1.9.4 Tools that were used to create MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734427867552"></a><p>
      The following is a list of some of the tools we have used to
      create MySQL. We use this to express our thanks to those that has
      created them as without these we could not have made MySQL what it
      is today.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Free Software Foundation
        </p><p>
          From whom we got an excellent compiler
          (<span class="command"><strong>gcc</strong></span>), an excellent debugger
          (<span class="command"><strong>gdb</strong></span> and the <code class="literal">libc</code>
          library (from which we have borrowed
          <code class="filename">strto.c</code> to get some code working in
          Linux).
        </p></li><li class="listitem"><p>
          Free Software Foundation &amp; The XEmacs development team
        </p><p>
          For a really great editor/environment.
        </p></li><li class="listitem"><p>
          Julian Seward
        </p><p>
          Author of <code class="literal">valgrind</code>, an excellent memory
          checker tool that has helped us find a lot of otherwise hard
          to find bugs in MySQL.
        </p></li><li class="listitem"><p>
          Dorothea Lütkehaus and Andreas Zeller
        </p><p>
          For <code class="literal">DDD</code> (The Data Display Debugger) which
          is an excellent graphical front end to
          <span class="command"><strong>gdb</strong></span>).
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="supporters"></a>1.9.5 Supporters of MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm46734427853360"></a><p>
      Although Oracle Corporation and/or its affiliates own all
      copyrights in the <code class="literal">MySQL server</code> and the
      <code class="literal">MySQL manual</code>, we wish to recognize the
      following companies, which helped us finance the development of
      the <code class="literal">MySQL server</code>, such as by paying us for
      developing a new feature or giving us hardware for development of
      the <code class="literal">MySQL server</code>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          VA Linux / Andover.net
        </p><p>
          Funded replication.
        </p></li><li class="listitem"><p>
          NuSphere
        </p><p>
          Editing of the MySQL manual.
        </p></li><li class="listitem"><p>
          Stork Design studio
        </p><p>
          The MySQL website in use between 1998-2000.
        </p></li><li class="listitem"><p>
          Intel
        </p><p>
          Contributed to development on Windows and Linux platforms.
        </p></li><li class="listitem"><p>
          Compaq
        </p><p>
          Contributed to Development on Linux/Alpha.
        </p></li><li class="listitem"><p>
          SWSoft
        </p><p>
          Development on the embedded <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> version.
        </p></li><li class="listitem"><p>
          FutureQuest
        </p><p>
          The <code class="option">--skip-show-database</code> option.
</p></li></ul>
</div>

</div>

</div>

</div>
<div class="copyright-footer">

</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a></td>
<td width="20%" align="center"><a accesskey="u" href="">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="installing.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top"> Preface and Legal Notices</td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top">Chapter 2 Installing and Upgrading MySQL</td>
</tr>
</table>
</div>
</body>
</html>
